2011-10-16 12 views
5

जबकि उपयोगकर्ता एक संपादन टेक्स्ट में टाइप कर रहा है, मैं कुछ कीवर्ड को रंग बदलने के लिए चाहता हूं। मैं कीवर्ड के चारों ओर एचटीएमएल टैग रख सकता हूं जब ऐप उपयोगकर्ता को टाइप करता है और एचटीएमएल.फॉम एचटीएमएल का उपयोग करता है लेकिन उपयोगकर्ता वास्तविक एचटीएमएल टैग खुद में प्रवेश करेगा और इससे गड़बड़ हो जाएगी। तो मुझे लगता है कि मुझे स्पैन करने योग्य का उपयोग करना चाहिए?उपयोगकर्ता टाइपिंग के रूप में टेक्स्ट रंग बदलें?

और इन कीवर्ड के लिए मुझे संपादन टेक्स्ट को कैसे स्कैन करना चाहिए? मतलब - सबसे कुशल तरीका क्या है? मैं शायद सभी खोजशब्दों की एक सरणी सोच रहा था - और फिर लूप करें और देखें कि कोई मिलान मिल गया है या नहीं। इस दृष्टिकोण के बारे में कोई विचार?

उत्तर

2

हाय उपयोगकर्ता को टाइप करने और पैटर्न की जांच करने के लिए लिंकिफ़ाई का उपयोग करने के लिए संपादित टेक्स्ट पर टेक्स्टवॉचर का उपयोग करें। https://developer.android.com/reference/android/text/util/Linkify.html

EditText.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int arg1, int arg2, int arg3) { 
       // TODO Auto-generated method stub 

      } 

}

उपयोग onTextChanged श्रोता क्या उपयोगकर्ता लिख ​​रहा है की जाँच करने के।

पैटर्न मिलान के लिए नमूना .. int flags = पैटर्न .CASE_INSENSITIVE; पैटर्न पी = Pattern.compile ("\ [0-9] * \", झंडे); Linkify.addLinks (myTextView, पी, "सामग्री: //com.foo");

+0

हाँ मैं linkify को देखा और यह लगभग ठीक मैं तथ्य यह है मैं न क्लिक करने योग्य बनाना चाहते के अलावा क्या जरूरत है लिंक। – bwoogie

+1

जावा से रेगेक्स का प्रयोग करें। – om252345

0

onTextChanged श्रोता में एक पैटर्न Matcher और पाठ के साथ मेल खाने वाला पैटर्न बनाएं

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

import android.app.Activity; 
import android.graphics.Color; 
import android.graphics.Typeface; 
import android.os.Bundle; 
import android.text.Editable; 
import android.text.Spannable; 
import android.text.SpannableStringBuilder; 
import android.text.TextWatcher; 
import android.text.style.ForegroundColorSpan; 
import android.text.style.StyleSpan; 
import android.util.Log; 
import android.widget.EditText; 

public class ColorEditText extends Activity { 

private Pattern helloPattern = Pattern.compile("Hello"); 
private Pattern simplePattern = Pattern.compile("Simple"); 
private SpannableStringBuilder spannable; 
private EditText edit; 
private TextWatcher colorChangeText; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_color_edit_text); 

    edit =(EditText) findViewById(R.id.edit); 

    colorChangeText = new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, 
      int count) { 

      edit.removeTextChangedListener(colorChangeText);  

      Log.d("Changes",edit.getText().toString()); 

      spannable = new SpannableStringBuilder(edit.getText().toString()); 

      Matcher o = helloPattern.matcher(spannable);  


      while (o.find()) { 

       spannable.setSpan(new StyleSpan(Typeface.BOLD), o.start(), o.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
       spannable.setSpan(new ForegroundColorSpan(Color.rgb(103, 58, 183)), o.start(), o.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

      } 

      Matcher n = simplePattern.matcher(spannable); 

      while (n.find()) { 
       spannable.setSpan(new StyleSpan(Typeface.BOLD), n.start(), n.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
       spannable.setSpan(new ForegroundColorSpan(Color.rgb(0, 105, 92)), n.start(), n.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

      } 

      edit.setText(spannable); 
      edit.setSelection(spannable.length()); 

      edit.addTextChangedListener(colorChangeText); 
     } 



     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 


     } 
    }; 

    edit.addTextChangedListener(colorChangeText); 

} 

}

संबंधित मुद्दे