ui tips - 在textview底部畫(huà)線

要實(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);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,227評(píng)論 25 708
  • 我升級(jí)的主題是工作,今天想到自己升級(jí)主題的時(shí)候,早晨情緒還不錯(cuò),下午就感覺(jué)就不開(kāi)心厭煩了。 因?yàn)橄?..
    o糖果罐o閱讀 173評(píng)論 -1 1
  • 少壯不努力,梧桐杏花雨。 如果你沒(méi)有努力,就盡力享受吧 (或許我三觀不正 )
    彥雨閱讀 306評(píng)論 0 0
  • 人生,需要來(lái)場(chǎng)說(shuō)走就走的旅行! 三個(gè)女人,一拍而合,油門(mén)踩起、就出發(fā)了…在同里湖度假村開(kāi)完業(yè)務(wù)大會(huì),結(jié)束直接上路。...
    柒閱人生閱讀 985評(píng)論 0 4

友情鏈接更多精彩內(nèi)容