要實(shí)現(xiàn)這樣的效果:

屏幕快照 2018-04-29 下午2.49.01.png
用UnderlineSpan、Html實(shí)現(xiàn)的效果不是很好,決定繼承LineBackgroundSpan逐行畫(huà)線,效果不錯(cuò)。記錄下:
/**
* 自定義的UnderlineSpan,用于給TextView底部畫(huà)直線
*
* 建議在layout里給textView設(shè)置includeFontPadding=false,并且設(shè)置lineSpacingMultiplier/lineSpacingExtra
* 和paddingBottom以留出底部空間畫(huà)線
*/
public class CustomUnderlineSpan implements LineBackgroundSpan {
private Paint paint;
private TextView textView;
private float offsetY;
/**
*
* @param textView 被畫(huà)線的textview
* @param color 底部畫(huà)線的顏色
* @param lineHeight 畫(huà)線的高度(像素值)
* @param offsetY 畫(huà)線相對(duì)于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);
}
}
}
調(diào)起來(lái):
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);