ui tips - 在textview底部画线

要实现这样的效果:


屏幕快照 2018-04-29 下午2.49.01.png

用UnderlineSpan、Html实现的效果不是很好,决定继承LineBackgroundSpan逐行画线,效果不错。记录下:

/**
 * 自定义的UnderlineSpan,用于给TextView底部画直线
 *
 * 建议在layout里给textView设置includeFontPadding=false,并且设置lineSpacingMultiplier/lineSpacingExtra
 * 和paddingBottom以留出底部空间画线
 */
public class CustomUnderlineSpan implements LineBackgroundSpan {
    private Paint paint;
    private TextView textView;
    private float offsetY;

    /**
     *
     * @param textView 被画线的textview
     * @param color 底部画线的颜色
     * @param lineHeight 画线的高度(像素值)
     * @param offsetY 画线相对于textView行高从上往下的偏移距离(像素值)
     */
    public CustomUnderlineSpan(TextView textView, int color, float lineHeight, float offsetY) {
        paint = new Paint();
        paint.setColor(color);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(lineHeight);
        this.textView = textView;
        this.offsetY = offsetY;
    }

    @Override
    public void drawBackground(Canvas canvas, Paint p, int left, int right, int top, int baseline,
                               int bottom, CharSequence text, int start, int end, int lnum) {
        int lineNum = textView.getLineCount();
        Layout layout = textView.getLayout();
        float y;
        for (int i = 0; i < lineNum; i++) {
            y = layout.getLineTop(i) + offsetY;
            canvas.drawLine(layout.getLineLeft(i), y, layout.getLineRight(i), y, paint);
        }
    }
}

调起来:

SpannableString ss = new SpannableString(text);
ss.setSpan(new CustomUnderlineSpan(binding.title,
                            Color.parseColor("#C7FFE921"),
                            UIUtil.INSTANCE.dipToPixels(8),
                            UIUtil.INSTANCE.dipToPixels(22)),
                    0, intSpannableStringBuilderLength,
                    Spanned.SPAN_INCLUSIVE_INCLUSIVE);
title.setText(ss);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,922评论 25 709
  • 我升级的主题是工作,今天想到自己升级主题的时候,早晨情绪还不错,下午就感觉就不开心厌烦了。 因为想...
    o糖果罐o阅读 975评论 -1 1
  • 少壮不努力,梧桐杏花雨。 如果你没有努力,就尽力享受吧 (或许我三观不正 )
    彦雨阅读 1,911评论 0 0
  • 人生,需要来场说走就走的旅行! 三个女人,一拍而合,油门踩起、就出发了…在同里湖度假村开完业务大会,结束直接上路。...
    柒阅人生阅读 4,320评论 0 4