Android TextView設定字體粗細只有三種狀態,textStyle取值只有bold、nomral、italic、客戶需求是字體是medium粗細,只因ios是有medium屬性,Android被要求要一樣;
要實作這種方式,我們可以換另外一種思想去做,既然沒有medium,那就改變Paint的寬度,也就是畫筆的筆跡寬度,等同于改變于字體的粗細程度,而且更具靈活性,可以自由來調控寬度大小;使用setStrokeWidth(num)方法即可
實作起來也及其簡單,如下:
單一實作為
TextView tvTitle = findViewById(R.id.title);
TextPaint tp = tvTitle.getPaint();
tp.setStrokeWidth(1.0f)
setStrokeWidth()方法需要傳入一個float值,數值越大,字體越粗,0.0f表示常規畫筆的寬度,相當于默認情況,
全域實作為
繼承TextView即可,在onDraw方法里面呼叫setStrokeWidth()方法即可,寬度自由可控,代碼如下:
public class MediumBoldTextView extends TextView {
private float mStrokeWidth = 0.9f;
public MediumBoldTextView(Context context) {
super(context);
}
public MediumBoldTextView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public MediumBoldTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.MediumBold_TextView,defStyleAttr,0);
mStrokeWidth = array.getFloat(R.styleable.MediumBold_TextView_strokeWidth,mStrokeWidth);
}
@Override
protected void onDraw(Canvas canvas) {
//獲取當前控制元件的畫筆
TextPaint paint = getPaint();
//設定畫筆的描邊寬度值
paint.setStrokeWidth(mStrokeWidth);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
super.onDraw(canvas);
}
}
R.styleable.MediumBold_TextView在attrs.xml檔案下:

這樣就可以直接在布局中使用了,然后通過設定strokeWidth即可自由改變寬度,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/239078.html
標籤:其他
下一篇:Android 解決Android studio4.1.1不適配ButterKnife的問題(已解決可以獲取控制元件但是報空指標的問題)
