更改 TextView 中特定单词的颜色

26h*_*mkk 1 java android textview android-layout

我有一个字符串数组:

String[] words = {"spades", "hearts", " diamonds", "clubs"};
Run Code Online (Sandbox Code Playgroud)

我想将 TextView 中所有出现的这些单词的文本颜色从常规的黑色更改为红色。我将如何去做(如果有办法)?谢谢!

Eli*_*son 5

您可以使用SpannableString. 假设您想abc将字符串着色为fooabcbar绿色:

String s = "fooabcfoo";
SpannableString spannable = new SpannableString(s);
spannable.setSpan(new ForegroundColorSpan(Color.GREEN), 3, 6, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE));
view.setText(spannable)
Run Code Online (Sandbox Code Playgroud)

这基本上是Html.fromHtml()jackson95 建议的幕后工作。

最后一个参数用于.setSpan()控制在跨度边缘插入字符时跨度如何变化。“独占”意味着跨度不会扩展到覆盖新字符。如果TextView不可编辑,那么您在那里放什么实际上并不重要。

您可以向字符串添加任意数量的跨度,因此您可以轻松地遍历字符串,查找要突出显示的单词并简单地为每个单词添加跨度。

您可以添加许多其他跨度,用于控制诸如字体和其他类型的装饰之类的内容。您甚至可以创建自己的跨度来调用任意绘图命令,这是通过.draw()ReplacementSpan.