9
SpannableStringBuilder sb = new SpannableStringBuilder("Hello World");
ForegroundColorSpan fcs = new ForegroundColorSpan(R.color.text_blue);
sb.setSpan(fcs, 5, 11,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

在此处输入图像描述

res/Values/color.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="text_blue">#FF39ACEE</color>
</resources>

颜色已经改变了,但是变成了别的东西,而不是我想要的蓝色。

谢谢你。

4

4 回答 4

20

尝试这个

    SpannableStringBuilder sb = new SpannableStringBuilder("Hello World");
    int color = getResources().getColor(R.color.text_blue);
    ForegroundColorSpan fcs  =new ForegroundColorSpan(color);
    sb.setSpan(fcs, 0, sb.length(),0);
    TextView tv= (TextView) findViewById(R.id.textView1);
    tv.setText(sb);

颜色.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="text_blue">#FF39ACEE</color>
</resources>

折断

在此处输入图像描述

下面没有工作

ForegroundColorSpan fcs = new ForegroundColorSpan(R.color.text_blue);
sb.setSpan(fcs, 0, sb.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
于 2013-09-10T14:01:06.937 回答
10

在问题的情况下 - 传入的颜色ForegroundColorSpan尚未解决。

但是在旁注中,将 a 添加ForegroundColorSpanTextView具有该属性的 aallCaps="true"将不起作用。

删除allCaps属性,在将字符串传递给构造函数之前以编程方式更改字符串的大小写SpannableStringBuilder

于 2017-09-13T14:51:57.103 回答
4

有时您会使用多个跨度,它们可能会相互影响。你应该最后设置 ForegroundColorSpan 。

于 2018-07-11T03:47:49.520 回答
1

当您通过时,R.color.XXX您并没有传递颜色 int,而是id在生成的类中传递了此资源的R—— 这也是一个 int,但由 android随机生成。这不是你的颜色,但它会被解析为一种颜色,这就是为什么你的文本会出现奇怪的颜色。

要从id int中提取字面颜色 int,您需要使用类似ContextCompat.getColor(context, R.color.XXX)

这很令人困惑,因为在某些情况下,我们可以直接使用Rid 设置资源,例如使用TextView.setText(int resId).

我们怎么知道?- 只需检查给定函数中参数的注释。

@ColorInt期待文字颜色(如0x0000ff-blue),如 in ForegroundColorSpan(@ColorInt int color)

@ColorRes期待一个 id int( R.color.blue),例如ContextCompat.getColor(@NonNull Context context, @ColorRes int id)

于 2019-03-11T13:25:25.323 回答