Android的TextView劃線樣式中斷的解決方案

我們在使用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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章