1. 程式人生 > >Android的TextView劃線樣式中斷的解決方案

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要同步使用。

哪裡可以找到我: