Android的TextView划线样式中断的解决方案

当在Android中使用TextView展示大小不一的文字并添加划线时,会出现划线中断的问题。通过自定义TextView并调整画线方法,可以解决这个问题。在列表中使用时,需确保clearLine和drawLine同步进行。查看作者的解决方案,可以访问其Github和CSDN博客。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在使用TextView经常在使用划线样式,我们只需要给textView的画笔

设置一个FLAG就可以了。

textView.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);

但是有的时候我们需要一个textview展示不同大小的文字,比如这样:

 SpannableString priceStyle = new SpannableString(originPrice);
                priceStyle.setSpan(new TextAppearanceSpan(context, R.style.s1), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                priceStyle.setSpan(new TextAppearanceSpan(context, R.style.s2), 1, privceString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                textView.setText(jdPriceStyle);

如果我们直接用上述方法给textview划线,就会出现划线中断的情况。
我们可以自定义一个TextView来画一条线解决这个问题。

public class TextViewWithLine extends TextView{
    private Paint p=new Paint();
    private boolean hasLine=false;
    public TextViewWithLine(Context context) {
        super(context);
    }

    public TextViewWithLine(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public TextViewWithLine(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public TextViewWithLine(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (hasLine)
        canvas.drawLine(0,getHeight()/2,getWidth(),getHeight()/2,p);
    }
    public void drawLine(int color,int lineWidth){
        p.setColor(color);
        p.setStrokeWidth(lineWidth);
        hasLine=true;
        invalidate();
    }
    public void clearLine(){
        hasLine=false;
        invalidate();
    }
}

如果用在列表里,clearLine和drawLine要同步使用。

哪里可以找到我:

我的Github: https://github.com/AndroidMsky

我的博客主页: http://blog.csdn.net/androidmsky

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值