我正在尝试为
设置不同的颜色 str.append(" ").append(isBlue ? "b" : "p");
SpannableString spannable = new SpannableString(str);
spannable.setSpan(new ForegroundColorSpan(isBlue ? R.color.blue: R.color.pink),
spannable.length() - 1,
spannable.length(),
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
miscTextView.setText(spannable);
str
是 StringBuilder
的实例。
如果 isBlue
为 true,我希望 miscTextView
的最后一个字符为蓝色,否则为粉红色,而其余文本保持黑色。
但事实证明,无论哪种情况,最后一个字符都是灰色的,这真的让我很困惑。
我做错了什么?
编辑:我已经检查了颜色资源 xml。Intellij 在 xml 代码行左侧显示颜色。
最佳答案
您正在使用返回id
的R.color.blue
。您应该按如下方式获取颜色:
getResources().getColor(R.color.blue)
所以将会是:
spannable.setSpan(new ForegroundColorSpan(isBlue ? getResources().getColor(R.color.blue): getResources().getColor(R.color.pink)),
spannable.length() - 1,
spannable.length(),
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
之所以是灰色,是因为R.color.blue
的值(id
值)可能是与灰色对应的整数。
关于android - SpannableString.setSpan 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20113653/