android - 如何在Android中获得另一种颜色的UnderlineSpan?

标签 android user-interface html spannable

我希望 Spannable 在 IDE 中看起来像错误 - 用另一种颜色下划线。

我试图创建扩展 android UnderlineSpanColorUnderlineSpan 类,但它使所有文本都变成另一种颜色(我只需要添加彩色下划线):

/**
 * Underline Span with color
 */
public class ColorUnderlineSpan extends android.text.style.UnderlineSpan {

    private int underlineColor;

    public ColorUnderlineSpan(int underlineColor) {
        super();
        this.underlineColor = underlineColor;
    }

    @Override
    public void updateDrawState(TextPaint ds) {
        super.updateDrawState(ds);
        ds.setColor(underlineColor);
    }
}

我还找到了 DynamicDrawableSpan 类,但我看不到要绘制到的 Canvas 边界。

用带边界参数的抽象绘制方法获得任何 Spannable impl 会很棒。

最佳答案

这不是最漂亮的解决方案,但它最终对我有用:

public class CustomUnderlineSpan implements LineBackgroundSpan {

int color;
Paint p;
int start, end;
public CustomUnderlineSpan(int underlineColor, int underlineStart, int underlineEnd) {
    super();
    color = underlineColor;
    this.start = underlineStart;
    this.end = underlineEnd;
    p = new Paint();
    p.setColor(color);
    p.setStrokeWidth(3F);
    p.setStyle(Paint.Style.FILL_AND_STROKE);
}

@Override
public void drawBackground(Canvas c, Paint p, int left, int right, int top, int baseline, int bottom, CharSequence text, int start, int end, int lnum) {

    if (this.end < start) return;
    if (this.start > end) return;

    int offsetX = 0;
    if (this.start > start) {
        offsetX = (int)p.measureText(text.subSequence(start, this.start).toString());
    }

    int length = (int)p.measureText(text.subSequence(Math.max(start, this.start), Math.min(end, this.end)).toString());
    c.drawLine(offsetX, baseline + 3F, length + offsetX, baseline + 3F, this.p);
}

这很奇怪,因为你必须指定字符索引来开始和结束你的下划线,但它对我有用。

关于android - 如何在Android中获得另一种颜色的UnderlineSpan?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19976977/

相关文章:

android - 如何获取不同资源引用的资源的ID?

javascript - 更新字体大小后不计算新的 offsetHeight

javascript - 如何使用 Bootstrap 按钮组和 AngularJS 在页面之间导航

javascript - 小型企业网站应使用哪种服务器端技术?

android - 如何使用 Unity 导出的 Android 库作为 AAR?

android - Android ViewParent 是否保证是 Viewgroup?

java - CheckBoxPreference - onSharedPreferenceChanged 方法未被调用

android - 通过足够快地单击按钮两次来绕过模态 Android 对话框?

html - 使用Css在固定宽度的div内垂直滚动

javascript - AJAX JQuery POST 不工作