如何改变TextView中部分文本的颜色?

12

我在我的应用程序中有一个简单的textView控件。

在这个textView上,我设置了文本“123456789” - 文本颜色为黑色。

我想让最后三位数字(789)以红色文本颜色显示。

是否有任何简单的方法可以做到这一点,而不使用两个textView控件

(一个将包含黑色的“123456”,另一个将包含红色的“789”)

这回答解决了你的问题吗?如何更改TextView的一部分颜色? - Dmitrii Leonov
6个回答

15

尝试一下:

使用 SpannableTextViewTextView 设置为 HTML 格式。

String text = "<font color='black'>123456</font><font color='red'>789</font>";
textView.setText(Html.fromHtml(text), TextView.BufferType.SPANNABLE);

Html.fromHtml(text)已被弃用,而Html.fromHtml(String, int)从api级别24开始可用。 - Akshatha S R
这不是可靠的,而且在所有SDK级别上都不能正常工作,特别是在旧版本(如21)上。 - Mihae Kheel

11
你可以使用这种方法。
public static final Spannable getColoredString(Context context, CharSequence text, int color) {
        Spannable spannable = new SpannableString(text);
        spannable.setSpan(new ForegroundColorSpan(color), 0, spannable.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        return spannable;
    }

稍后您可以使用以下方式调用它
textview.append(getColoredString(this, "Hi!", ContextCompact.getColor(this, R.color.red)));
textview.append(getColoredString(this, "User", ContextCompact.getColor(this, R.color.green)));

这是最可靠的方法,因为它可以在较低/旧版本中跨SDK级别工作。 - Mihae Kheel
最好的着色部分文本的答案。 - Gaurav Dureja

7

您可以使用

myTextView.setText(Html.fromHtml(stringB + "<font color=red>" + stringA + "</font>);

6
您可以使用 SpannableString 来为 TextView 中的字符串设置样式。
演示示例: Demo
Stack Overflow 帖子: SO Post

1

您可以在Java类中使用HTML横幅: 示例:

 textElement.setText(Html.fromHtml("123456 <fontcolor='#FF0000'>789</font>"));

或者在您的XML文件中使用CData格式: 示例:

<string name="numbers"><![CDATA[123456<fontcolor="#FF0000">789</font>]]></string>

希望那可以帮到你;)


1
我知道SO是发表答案的竞赛,但在提交答案之前请小心。 - Amy
抱歉,我现在正在使用手机,无法使其显示HTML脚本,它只是消失了 :/ - Primaël Quémerais

0

你可以使用这个。

textview.setText(Html.fromHtml(getString(R.string.stringname) + "" + " *" + "", Html.FROM_HTML_MODE_LEGACY));


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