在android中更改下划线的颜色
我正在开发android应用程序。我需要在Textview的某些部分下面加下划线在android中更改下划线的颜色,android,underline,Android,Underline,我正在开发android应用程序。我需要在Textview的某些部分下面加下划线 SpannableString content = new SpannableString("Ack:"); content.setSpan(new UnderlineSpan(), 0, content.length(), 0); tvAck.setText(content);` 我已经使用了上面的代码。但是现在我想改变下划线的颜色。谁能告诉我怎么做。任何帮助或建议都会被接受。我自己没有尝试过,所以这更像是一
SpannableString content = new SpannableString("Ack:");
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
tvAck.setText(content);`
我已经使用了上面的代码。但是现在我想改变下划线的颜色。谁能告诉我怎么做。任何帮助或建议都会被接受。我自己没有尝试过,所以这更像是一个想法,而不是一个解决方案,但可能值得尝试。类
UnderlineSpan
具有方法updateDrawState
,该方法将TextPaint
作为参数。反过来,TextPain可以具有字段public int linkColor
所以对你来说是这样的
TextPaint tp = new TextPaint();
tp.linkColor = [your color]; //not quite sure what the format should be
UnderlineSpan us = new UnderlineSpan();
us.updateDrawState(tp);
SpannableString content = new SpannableString("Ack:");
content.setSpan(us, 0, content.length(), 0); tvAck.setText(content);
TextPaint
和UnderlineSpan
的参考资料都很差,大部分javadoc都不见了(请自己判断:),所以我不确定如何使用它们。没有文档记录的设置下划线颜色的方法。但是,有一种未记录的TextPaint.setUnderline(int,float)
方法允许您提供下划线颜色和厚度:
final class ColoredUnderlineSpan extends CharacterStyle
implements UpdateAppearance {
private final int mColor;
public ColoredUnderlineSpan(final int color) {
mColor = color;
}
@Override
public void updateDrawState(final TextPaint tp) {
try {
final Method method = TextPaint.class.getMethod("setUnderlineText",
Integer.TYPE,
Float.TYPE);
method.invoke(tp, mColor, 1.0f);
} catch (final Exception e) {
tp.setUnderlineText(true);
}
}
}
在TextPaint中,有一个字段“underlineColor”和方法“setUnderlineText”,指示并可用于更改下划线颜色。但是,它们是'@hide'字段和方法,要使用它们,必须使用反射,如下所示:
Field field = TextPaint.class.getDeclaredField("underlineColor");
field.setAccessible(true);
field.set(ds, mUnderlineColor);
ds是您的TextPaint对象。遇到这种场景真的太晚了。另一种方法是,将多个跨距设置为相同的可跨距内容:
SpannableString content = new SpannableString("Ack:");
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
content.setSpan(
new ForegroundColorSpan(ContextCompat.getColor(context, R.color.red)),
0,
content.length(),
0
);
tvAck.setText(content, TextView.BufferType.SPANNABLE);
我想不出别的了。为什么不起作用?你试过了吗?这不起作用的原因是
updateDrawState
只告诉TextPaint
它应该加下划线。它不影响下划线颜色。下划线span
只使用文本颜色作为下划线颜色。linkColor
将仅为可点击span
(或urlsspan
)更改下划线(和文本)的颜色。我尝试了此操作,调用正常,但下划线颜色仍然为黑色:(对我来说效果很好,请注意,1.0f是线条厚度倍增。值1.0表示默认厚度,2.0表示厚度的两倍。它可以工作,但颜色和厚度不会从parcelable恢复(它的更改文本颜色带有下划线…而不仅仅是下划线)