Android的TextView劃線樣式中斷的解決方案
阿新 • • 發佈:2019-01-09
我們在使用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要同步使用。