2011-10-16 18 views
5

Kullanıcı bir EditText yazarken, belirli anahtar kelimelerin renk değiştirmesini isterim. Uygulamada kullanıcının yazdığını ve HTML'yi kullanarak HTML etiketlerini anahtar kelimelerin etrafına yerleştirebiliyorum. HTML, ancak kullanıcılar gerçek HTML etiketlerini kendileri girecek ve bu da hata yapacaktır. Sanırım Spannable'ı kullanmalı mıyım?Kullanıcı yazarken metin rengini değiştirir misiniz?

Ve bu anahtar kelimeler için EditText'i tam olarak nasıl taramalıyım? Anlamı - En verimli yol nedir? Belki de tüm anahtar kelimelerden bir dizi düşünüyordum ve sonra herhangi bir kibritin bulunup bulunmadığını görmek için uğraştım. Buna nasıl yaklaşılacağı hakkında bir fikrin var mı?

cevap

2

Merhaba Kullanıcının ne yazdığını görmek için EditWext'de TextWatcher'ı kullanın ve deseni kontrol etmek için Linkify'i kullanın. 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 

      } 

}

Kullanım OnTextChanged Dinleyici yazıyor hangi kullanıcı kontrol etmek.

Örnek eşleştirme örneği için .. int flags = Pattern.CASE_INSENSITIVE; Desen p = Model.compile ("\ [0-9] * \", bayraklar); Linkify.addLinks (myTextView, p, "içerik: //com.foo");

+0

Evet ben Linkify baktı ve neredeyse tam olarak ben ben tıklanabilir hale getirmek istemiyorum gerçeği dışında gerekenler bağlantıları. – bwoogie

+1

Java'dan Regex kullanın. – om252345

0

OnTextChanged İşleyici içinde Metin ile Desen eşleştirici ve maç desen oluşturma

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); 

} 

}

İlgili konular