EditText搜索的所有关键词都需要高亮显示。

11
2个回答

22

假设 et 是您的 EditText,tv 是 TextView 对象。请使用以下代码:


public class MotivationalQuotesActivity extends Activity {
    /** Called when the activity is first created. */

Button next;
EditText et; 
TextView tv;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
   et = (EditText) findViewById(R.id.et);
   tv = (TextView) findViewById(R.id.tv);
   tv.setText("The name of our country is Bangladesh. Bangladesh is a land of rivers.");

   next = (Button) findViewById(R.id.button1);
    next.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                tv.setText("The name of our country is Bangladesh. Bangladesh is a land of rivers.");
                String ett =et.getText().toString();
                String tvt =tv.getText().toString();

                int ofe = tvt.indexOf(ett,0);   
                Spannable WordtoSpan = new SpannableString( tv.getText() );

        for(int ofs=0;ofs<tvt.length() && ofe!=-1;ofs=ofe+1)
        {       


              ofe = tvt.indexOf(ett,ofs);   
                  if(ofe == -1)
                      break;
                  else
                      {                       

                      WordtoSpan.setSpan(new BackgroundColorSpan(0xFFFFFF00), ofe, ofe+ett.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                      tv.setText(WordtoSpan, TextView.BufferType.SPANNABLE);
                      }


        }  


            }
        });

    }

}
结果是:

在这里输入图片描述


我还有一个问题,如何清除或重置单词中的高亮显示? - Mordiggian
1
如果要清除高亮,可以使用两种方法: 第一种:将原始文本设置为TextView,例如 tv.setText("我们国家的名字是孟加拉国。孟加拉国是一个多河流的土地。"); 第二种:使用上面的高亮方法,但将背景颜色(在这种情况下为黑色)作为高亮颜色,例如:WordtoSpan.setSpan(new BackgroundColorSpan(color.black), ofe, ofe+ett.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - Imran Rana
抱歉再次打扰您,但是否有可能突出显示搜索的单词,即使TextView与EditText中的文本不同,例如TextView具有“我们国家的名字是孟加拉国。孟加拉国是河流之地。”而我只输入了“孟加拉国”。 - Mordiggian
1
为进行不区分大小写的搜索,请在indexOf之前使用toUpperCase或toLowerCase处理原始字符串和子字符串 :) - Imran Rana

0
一个简单快捷的方式来强调文本,是使用字符串替换方法。用 font 标签替换需要强调的字符串即可。
Spanned strHTML= Html.fromHtml("<center>"+full_string.replaceAll(strSrch,"<font color='yellow'>"+strSrch+"</font>")+"</center><br/>");
TextView tv=(TextView) v.findViewById(R.id.txtPager);
tv.setText(strHTML,TextView.BufferType.SPANNABLE);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接