我正在开发安卓应用程序。我需要强调一些Textview。
SpannableString content = new SpannableString("Ack:");
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
tvAck.setText(content);`
我已经为此使用了上面的代码。但现在我想改变下划线的颜色。谁能告诉我该怎么做。接受任何帮助或建议。
没有记录的方法来设置下划线颜色。但是,有一种未记录的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);
}
}
}
我自己没有尝试过,所以这更像是一个想法而不是解决方案,但可能值得尝试。类UnderlineSpan
有方法updateDrawState
,它TextPaint
作为参数。反过来, TextPain 可以有 field 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完全缺失(自己判断:http: //developer.android.com/reference/android/text/TextPaint.html),所以我不确定如何使用这些尽管。
在 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);