TextView ForegroundColorSpan 失效¶
SpannableStringBuilder先后使用了ClickableSpan和ForegroundColorSpan,ForegroundColorSpan失效问题。 直观表现是没有ForegroundColorSpan的颜色。
以下代码,在某些旧机器上,Android 7,出现此问题。红米6A(8.1.0),一加5(10),均无此问题。
SpannableStringBuilder ssb = new SpannableStringBuilder("my sentence.");
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(@NonNull View widget) {
// ..
}
};
ssb.setSpan(clickableSpan, start, end, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
ssb.setSpan(new UnderlineSpan(), start, end, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
ssb.setSpan(new ForegroundColorSpan(colorValue), start, end, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
解决方法¶
我们查看ForegroundColorSpan
源码,发现指定颜色是通过updateDrawState(TextPaint ds)
来实现的。
由此想到,在ClickableSpan中顺便指定颜色,不使用ForegroundColorSpan就可以来。
新增一个抽象类ColorClickSpan
。里面有一个颜色值。
public abstract class ColorClickSpan extends ClickableSpan {
private int color;
public ColorClickSpan(int color) {
this.color = color;
}
@Override
public void updateDrawState(TextPaint ds) {
if (ds != null) {
ds.setColor(color);
ds.setUnderlineText(true);
}
}
}
直接使用ColorClickSpan
ssb.setSpan(new ColorClickSpan(color) {
@Override
public void onClick(View widget) {
// ...
}
}, start, end, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
颜色可以正常显示了。
本站说明
一起在知识的海洋里呛水吧。广告内容与本站无关。如果喜欢本站内容,欢迎投喂作者,谢谢支持服务器。如有疑问和建议,欢迎在下方评论~