使用EditText高亮显示Textview

4

我目前正在制作一款类似于Android搜索引擎的应用程序,我希望能够从EditText中搜索到文本并将其高亮显示在TextView中... 目前我只实现了在TextView中高亮显示第一个单词。

TV.setText("Hello World", TextView.BufferType.SPANNABLE);
            Spannable WordtoSpan = (Spannable) TV.getText();
            WordtoSpan.setSpan(new BackgroundColorSpan(0xFFFFFF00), 0, notes.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            TV.setText(WordtoSpan);
2个回答

6

我认为你想要在用户输入EditText时,突出显示TextView中的特定单词。

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

    String ett =et.getText().toString();
    String tvt =tv.getText().toString();

                int index = tvt.indexOf(ett);

                Spannable WordtoSpan = new SpannableString( tv.getText() );
                if(index != -1)
                {
                WordtoSpan.setSpan(new BackgroundColorSpan(0xFFFFFF00), index, index+ett.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                tv.setText(WordtoSpan, TextView.BufferType.SPANNABLE);
                }
                else
                tv.setText("The name of our country is Bangladesh");

这是结果:
这是输出:
在此处输入图像说明
这是完整的代码:
 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");

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

                public void onClick(View v) {
                    // TODO Auto-generated method stub

                    String ett =et.getText().toString();
                    String tvt =tv.getText().toString();

                    int index = tvt.indexOf(ett);

                    Spannable WordtoSpan = new SpannableString( tv.getText() );
                    if(index != -1)
                    {
                    WordtoSpan.setSpan(new BackgroundColorSpan(0xFFFFFF00), index, index+ett.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                    tv.setText(WordtoSpan, TextView.BufferType.SPANNABLE);
                    }
                    else
                    tv.setText("The name of our country is Bangladesh");


                }
            });

        }

    }

这是否适用于输入两个或更多相同的单词? - Mordiggian
非常感谢您提供的帮助。但是,如果您知道如何突出显示在EditText中键入的所有相同单词,那将对我非常有帮助:D 再次感谢您。 - Mordiggian
抱歉我之前已经尝试给它点赞,但它总是说需要15或更多的声望...我的声望刚刚提升,所以现在我可以点赞你的回答了...如果我的评论看起来像我不接受你的回答,再次对此表示抱歉。 - Mordiggian
这是一个与此帖子相关的单独问题,涉及EditText搜索时高亮显示所有单词。 - Mordiggian

1

它可以帮助

    TextView tv = (TextView) findViewById(R.id.hello);
    SpannableString s = new SpannableString(getResources().getString(R.string.linkify));

    Pattern p = Pattern.compile("abc");


     Matcher m = p.matcher(s);

    while (m.find()) {
        int start = m.start();
        int end = m.end();
        s.setSpan(new ForegroundColorSpan(Color.RED), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    }
    tv.setText(s);

你好,欢迎来到SO。与其仅仅抛出代码,不如解释一下你的思路,以帮助用户理解你在做什么。谢谢。 - Cthulhu

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