2013-04-15 29 views
2

我的工作模塊從編輯文本搜索抓取文本,並將其搜索到當前文本視圖。如果存在,則在當前文本視圖中突出顯示此文本我也爲這個代碼搜索,但沒有找到任何相關的答案。搶從編輯的文本文字和當前文本視圖突出本文

tv=(TextView) mView.findViewById(R.id.detailsText); 
    edit_text=(EditText)findViewById(R.id.searchText); 


edit_text.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void afterTextChanged(Editable s) { 
     } 

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

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

      hightLightText(tv, s.toString()); 
     } 
    }); 



} 

void hightLightText(TextView textView, String searchString){ 
    try{ 

     String s=getResources().getString(R.string.firstpage); 

     String withHighLightedText = s.replaceAll(searchString, "<font color='red'>"+searchString+"</font>"); 
     String styledText = "This is <font color='red'>simple</font>."; 
     textView.setText(Html.fromHtml(withHighLightedText), TextView.BufferType.SPANNABLE); 
     }catch(Exception ex){ 

     } 

} 
+0

你的代碼工作正常...!文本被突出顯示..你最近遇到了什麼問題? – Laksh

回答

1

調用這個函數的突出顯示。

public void hightLightText(TextView textView, String searchString) { 
    String s = textView.getText().toString(); 
    SpannableString str = new SpannableString(s); 
    if (searchString != null && !searchString.equalsIgnoreCase("")) { 
     int startIndex = 0; 
     while (true) { 
      startIndex = s.indexOf(searchString, startIndex); 

      if (startIndex >= 0) { 
       str.setSpan(new BackgroundColorSpan(Color.YELLOW), 
         startIndex, startIndex + searchString.length(), 
         Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
       startIndex++; 
      } else { 
       break; 
      } 
     } 
    } 
    textView.setText(str); 
} 
+0

謝謝埃爾多斯,這段代碼適用於我.. –

+0

歡迎您... –

2

TextView中的HTML標記格式非常有限。

<b>Bold</b> and <i>Italic</i> 

做的工作,但

<font color> 

可悲的是沒有。

使用Spannable而不是突出顯示你想要的文字部分。

這裏是使選定的文本EditText視圖中斜體一個例子:Is there any example about Spanned and Spannable text

0
EditText edit_text; 
TextView tv; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.edittest); 
    tv=(TextView) findViewById(R.id.detailsText); 
    edit_text=(EditText)findViewById(R.id.searchText); 


    edit_text.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void afterTextChanged(Editable s) { 
     } 

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

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

      hightLightText(tv, edit_text.getText().toString().trim()); 
     } 
    }); 



} 


void hightLightText(TextView textView, String searchString){ 
    try{ 

     String s=getResources().getString(R.string.app_name); 

     String withHighLightedText = s.replaceAll(searchString, "<font color='red'>"+searchString+"</font>"); 
     String styledText = "This is <font color='red'>simple</font>."; 
     textView.setText(Html.fromHtml(withHighLightedText), TextView.BufferType.SPANNABLE); 
     }catch(Exception ex){ 

     } 

} 

在你的代碼只是改變了波紋管方法

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

     hightLightText(tv, edit_text.getText().toString().trim()); 
    }