在android中更改下划线的颜色
Posted
技术标签:
【中文标题】在android中更改下划线的颜色【英文标题】:Change the color of the underline in android 【发布时间】:2011-12-02 19:54:24 【问题描述】:我正在开发安卓应用程序。我需要在一些 Textview 下划线。
SpannableString content = new SpannableString("Ack:");
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
tvAck.setText(content);`
我已经使用了上面的代码。但现在我想改变下划线的颜色。谁能告诉我该怎么做。我们接受任何帮助或建议。
【问题讨论】:
【参考方案1】:没有记录的方法来设置下划线颜色。但是,有一个未记录的 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);
【讨论】:
我试过这个并且调用有效,但下划线颜色仍然是黑色。 :( 对我来说非常适合,作为对其他人的说明,1.0f 是线宽乘数。值 1.0 表示默认厚度,2.0 将是厚度的两倍。 可以,但是颜色和厚度没有从parcelable中恢复(【参考方案2】:我自己没有尝试过,所以这更像是一个想法而不是解决方案,但可能值得尝试。类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 完全缺失(请自行判断:http://developer.android.com/reference/android/text/TextPaint.html),所以我不确定如何使用它们。
【讨论】:
我想不出别的了。为什么它不起作用?你试过了吗? 这不起作用的原因是updateDrawState
只告诉TextPaint
它应该加下划线。它不影响下划线颜色。 UnderlineSpan
只使用文本颜色作为下划线颜色。 linkColor
只会更改 ClickableSpan
(或 URLSpan
)的下划线(和文本)的颜色。【参考方案3】:
在 TextPaint 中,有一个字段 'underlineColor' 和方法 'setUnderlineText',指示并可以用来更改下划线颜色。但是,它们是 '@hide' 字段和方法,要使用它们,您必须使用反射,如下所示:
Field field = TextPaint.class.getDeclaredField("underlineColor");
field.setAccessible(true);
field.set(ds, mUnderlineColor);
ds 是您的 TextPaint 对象。
【讨论】:
【参考方案4】:遇到这种情况真的很晚了。这是另一种方式,将多个跨度设置为相同的可跨度内容:
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);
【讨论】:
它用下划线改变文本颜色......不仅仅是下划线以上是关于在android中更改下划线的颜色的主要内容,如果未能解决你的问题,请参考以下文章
Android TextView中的下划线和更改文本颜色[重复]
如何更改 TextInputEditText 中的默认下划线颜色