突出显示文本在TextView中可能包含HTML标记
问题描述:
我想制作一个关于正则表达式的应用程序。用户输入一个正则表达式和一个测试文本,我想在测试文本中突出显示与正则表达式匹配的所有内容。现在我做了这样的事情:突出显示文本在TextView中可能包含HTML标记
// 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
- 预期的结果=
Hello<br>world
(由于*上不支持着色,我用黑体这里代替) - 真正的结果=
Hello
world
我试着用Html.escapeHtml
。然而它被添加在API级别16,而我的最低要求是8.
我的问题是如何解决上述问题?
答
你应该使用Spans:
Spannables可用于TextView的文本的备用零件:例如颜色与ForeGroundColorSpan。它甚至可以用于与文本(文本消息中的表情符号)内联地引入图像。
这里是一个硬编码的例子,突出显示<br>
部分。你应该添加的正则表达式algorithme:
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>
main.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" />
您可以尝试用'<'和'>'用'>'替代' HamZa
如果正则表达式为“ johnchen902
我说的是结果,所以你应该在结果中取代它,而不是输入。 – HamZa