【问题标题】:Android multi color in one TextView [duplicate]一个TextView中的Android多色[重复]
【发布时间】:2012-04-25 19:42:42
【问题描述】:

可能重复:
Is it possible to have multiple styles inside a TextView?

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

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

【问题讨论】:

标签: android textview styling


【解决方案1】:

您可以使用 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);
}

【讨论】:

  • 我们可以同样设置部分文本的背景吗?
  • 你也可以把这个字符串放在strings.xml中(但是你必须用&lt;![CDATA[**Your string here**]]&gt;包围它)。然后你像他说的那样设置字符串,但你不需要 TextView.BufferType.SPANNABLE 。
【解决方案2】:

试试这个方法

    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);

【讨论】:

  • OP 已经说过他不知道文本中有多少个单词,这排除了任何使用硬编码位置的解决方案。
  • @tbm 我刚刚提出了一个简单的解决方案,在此基础上,我们可以制作一个动态的,就像句子中的“Hi”字应该用红色显示“Bye”字用蓝色等等为此,我们必须获得动态位置,然后我们可以基于它添加我们的逻辑。
  • @tbm 然后不要对它们进行硬编码,而是即时计算它们。我喜欢这个答案。
  • 与公认的答案相比,这是一个更好的解决方案,而且资源消耗更少。它不需要对文本进行不必要的解析。
【解决方案3】:

你基本上想要的是SpannableString

完整示例请参见this

【讨论】:

  • 感谢 SpannableStrings 解决了它。
  • 是的,我检查了我使用的那个 :) 但是非常感谢,我只能选择一个。
猜你喜欢
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
  • 2016-10-22
相关资源
最近更新 更多