一个TextView中的Android多色

Hüs*_*eki 47 android styling textview

可能重复:
TextView中是否可以有多个样式?

我希望我的TextView以红色显示其部分文本,而其他部分显示为黑色.它的内容(文本)是动态创建的,我不知道有多少单词是红色的.

有没有办法像html-css那样做?

Cos*_*aru 92

您可以使用Spannable来实现您想要的效果.

String text = "This is <font color='red'>red</font>. This is <font color='blue'>blue</font>.";

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
   textView.setText(Html.fromHtml(text,  Html.FROM_HTML_MODE_LEGACY), TextView.BufferType.SPANNABLE);
} else {
   textView.setText(Html.fromHtml(text), TextView.BufferType.SPANNABLE);
}
Run Code Online (Sandbox Code Playgroud)

  • 你也可以将这个字符串放在strings.xml中(但是你必须用`<![CDATA [**你的字符串**]]>`来包围它.然后你像他说的那样设置字符串,但你不需要TextView.BufferType.SPANNABLE. (2认同)

Kha*_*han 81

试试这种方式

    TextView tv = (TextView)findViewById(R.id.tv);

    Spannable wordtoSpan = new SpannableString("I know just how to whisper, And I know just how to cry,I know just where to find the answers");        
    wordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    wordtoSpan.setSpan(new ForegroundColorSpan(Color.RED), 5, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    tv.setText(wordtoSpan);
Run Code Online (Sandbox Code Playgroud)

  • @tbm然后不要硬编码它们,在运行中计算它们.我喜欢这个答案. (3认同)
  • 与公认的答案相比,这是一个更好的解决方案,而且资源占用更少。它不需要不必要的文本解析。 (2认同)

Ari*_*eem 6

你基本上想要的是 SpannableString

对完整的例子: