在TextView或WebView中突出显示文本

21

能否在TextViewWebView中突出显示文本?

我看到在EditText中可以实现。

在EditText中高亮显示文本

我想在TextViewWebView中做同样的事情。
这个是可能的吗?


也可以看看这个:https://dev59.com/a2015IYBdhLWcg3w7wQW - hassanadnan
可能是在TextView中是否可以有多个样式?的重复问题。 - blahdiblah
在webview中实现这个功能的方法是什么? - AnupamChugh
4个回答

62

启用TextView的Spannable存储! 默认情况下,EditText中的Spannable存储为true。

因此

TextView myTV = (TextView)findViewById(R.id.textView1);
String  textString = "StackOverFlow Rocks!!!"; 
Spannable spanText = Spannable.Factory.getInstance().newSpannable(textString);
spanText.setSpan(new BackgroundColorSpan(0xFFFFFF00), 14, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
myTV.setText(spanText);

3
谢谢,它很好地完成了工作。但我认为通过以下方式创建 Spannable 文本:Spannable spanText = Spannable.Factory.getInstance().newSpannable(textString); 比使用 textView.setText() 和 textView.getText() 更好。 - VAdaihiep
有没有办法创建一个文本视图并对其设置多个跨度,使其呈现两端对齐的效果? - Hamid Reza
有没有一种方法可以在Webview中显示高亮匹配项? - AnupamChugh
很棒的答案,对我有所帮助,但是关于与Android API相关的两件事情让我感到困惑:1)在9年后,这仍然是最好的方法吗?似乎应该有更好/更清晰的API调用。2)非常奇怪的是,您必须设置视图项的实际文本值才能设置样式。这感觉像是关注点冲突(而不是关注点分离)。感觉样式和内容混在了一起。 - raddevus

1
同时,你也可以使用这个解决方案来处理 WebView。调用 findAllAsync。
webview.findAllAsync(((EditText) findViewById(R.id.edit)).getText().toString());

然后将 FindListener 添加到 WebView 中。
    webview.setFindListener(new FindListener() {

        @Override
        public void onFindResultReceived(int activeMatchOrdinal, int numberOfMatches, boolean isDoneCounting) {
            Toast.makeText(getApplicationContext(), "Matches: " + numberOfMatches, Toast.LENGTH_LONG).show();
        }
    });

使用webview.findNext(false);在结果中进行迭代,其中false/true表示方向。
但是这个解决方案是在API level 16中添加的!!!相反,您可以设置JavaScript进行高亮显示-http://www.nsftools.com/misc/SearchAndHighlight.htm

0

对于 TextView

您可以在您的活动、片段或适配器中使用 textView.setTextIsSelectable(true)


-1

实际上,您不必自己开发此功能。您只需要使用EditText而不是TextView,同时将EditText的android:editable设置为false。

我的答案在这里,希望能对您有所帮助:

https://dev59.com/13A85IYBdhLWcg3wEPVL#11026292


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