我正试着为

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

strStringBuilder的一个实例。
如果miscTextView为真,我希望isBlue的最后一个字符为蓝色,否则为粉红色,而其余文本保持黑色。
但不管是哪种情况,最后一个角色都是灰色的,这让我很困惑。
我做错了什么?
编辑:我已经检查了颜色资源xml。intellij显示xml代码行左侧的颜色。

最佳答案

您使用的R.color.blue返回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.blue的值(id值)可能是与颜色灰色相对应的整数。

10-08 07:02