2

我正在尝试为

            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。如果为真,我希望最后一个字符为miscTextView蓝色isBlue,否则为粉红色,而其余文本保持黑色。
但事实证明,无论哪种情况,最后一个字符都是灰色的,这让我很困惑。我做错了什么?

编辑:我已经检查了颜色资源 xml。Intellij 在 xml 代码行的左侧显示颜色。

4

1 回答 1

4

您正在使用R.color.bluewhich 返回id. 你应该得到如下颜色:

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.blueid值)的值可能是与灰色对应的整数。

于 2013-11-21T06:06:09.857 回答