java - 突出显示 TextView 中可能包含 HTML 标签的文本

标签 java android regex textview highlight

我想做一个关于正则表达式的应用程序。用户输入正则表达式和测试文本,我想突出显示测试文本中与正则表达式匹配的所有内容。现在我做了这样的事情:

// txaTestText is an EditText
Editable testText = txaTestText.getText(); 

// pattern is a java.util.regex.Pattern input by user
Matcher matcher = pattern.matcher(testText);

// txaFindResult is a TextView
txaFindResult.setText(Html.fromHtml(matcher
        .replaceAll("<font color=\"red\">$0</font>")));

问题是用户可能输入一些包含 HTML 标签的字符串作为测试文本。例如:

  • 正则表达式 = o
  • 测试文本 = Hello<br>world
  • 预期结果 = Hell<b>o</b><br>w<b>o</b>rld (由于StackOverflow不支持着色,所以我在这里使用粗体)
  • 实际结果 = Hell<b>o</b><br/>w<b>o</b>rld

我尝试使用Html.escapeHtml 。不过它是在 API 级别 16 中添加的,而我的最低要求是 8。

我的问题是如何解决上述问题?

最佳答案

您应该使用Spans :

Spannables 可用于替换 TextView 文本的部分:例如颜色 ForeGroundColorSpan 。它甚至可以用于引入与文本内联的图像(短信中的表情符号)。

这是一个硬编码示例,突出显示 <br>部分。您应该添加正则表达式算法:

MainActivity.java

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView textView = (TextView)findViewById(R.id.helloworld);
        Spannable spannableString = new SpannableString(getString(R.string.hello_world));        
        spannableString.setSpan(new ForegroundColorSpan(Color.RED), 5, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        textView.setText(spannableString);

    }

strings.xml

<string name="hello_world">
  <![CDATA[
    Hello <br> World 
  ]]>
</string>

ma​​in.xml

<TextView
    android:id="@+id/helloworld"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:text="@string/hello_world" />

Screenshot highlight <br> tag

关于java - 突出显示 TextView 中可能包含 HTML 标签的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16880510/

相关文章:

java - JLabel HTML 上标混淆了格式。有什么技巧可以解决这个问题吗?

java - Spring RESTful (Gradle) : @Autowired results in NullPointerException

android - 在用户可见 Activity 后执行方法

android - Android 上的位置服务有多准确

Python Dataframe 获取子字符串

ruby - 提取部分电子邮件地址

java - 悬停在 Android 中的按钮上意味着什么?

android - viewModel和MainActivity之间如何通过Databinding进行通信?

Java 模式/匹配器

java - interviewstreet.com - 字符串相似度