TextView可以有不同颜色的字母吗?

17
我想显示“123”,但让1显示为红色,2显示为绿色,3显示为黑色... 是否可能?或者有没有其他推荐在同一个TextView中显示不同文本颜色的方法?

我想在同一个TextView中显示“123”,但是让其中的数字1显示为红色,数字2显示为绿色,数字3显示为黑色。是否有可能实现这个效果?如果不能,是否有其他建议的方法可以在同一个TextView中显示不同的文本颜色?


我没有代码,但可以使用HTML文本完成。 - ingsaurabh
为什么要这样做?你可以创建一个LinearLayout并填充任意数量的TextView:D - PedroAGSantos
3个回答

59

如果你正在使用SpannableString,那么可以在文本的不同位置使用不同的颜色。例如:

SpannableString text = new SpannableString("Lorem ipsum dolor sit amet");  
// make "Lorem" (characters 0 to 5) red  
text.setSpan(new ForegroundColorSpan(Color.RED), 0, 5, 0);  
textView.setText(text, BufferType.SPANNABLE);

这里有一个更完整的例子点击这里

SpannableString的Javadoc


1
你的答案应该被标记为正确的(并不是说已经标记为正确的不对,但我认为这个是正确的方法)。 - Leeeeeeelo
我无法让它正常工作。即使其中一个字母应该是彩色的,但文本仍然全是黑色的。标志0到底是什么意思?在Spanned类中没有定义它。 - FractalBob

2
啊,我找到了它,使用以下代码。
myTextView.setText(Html.fromHtml(html text having 1 in red 2 in green and so on));

我不懂网页制作,建议您咨询一位能为您编写HTML的人:P

谢谢,这里有更完整的内容: String styledText ="<font color='red'>asd</font>"; cache.timeView.setText(Html.fromHtml(styledText) ); - Lukap
2
我认为使用HTML不是正确的方法。 - Kaj
1
为什么HTML不是正确的方式,@Kaj? - Alesqui

1

您可以像这样使用无需 HTML 的多种颜色打印行:

TextView TV = (TextView)findViewById(R.id.mytextview01);

  Spannable WordtoSpan = new SpannableString("Your message");        

WordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 0, WordtoSpan .length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

TV.setText(WordtoSpan);

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