TextView優雅的加纖細的粗

最近ui找我說我們app有些字體加粗的太粗了,而ios就粗的很纖細。我去翻了翻我們android的代碼,的確是按照系統加粗的方式來的

android:textStyle="bold"

ui說的就是聖旨,於是我開始各種面向搜索編程,終於找到了解決辦法

第一種辦法

 TextView chineseTv = findViewById(R.id.tv_chinese);
   TextPaint paint = chineseTv.getPaint();
   paint.setFakeBoldText(true);
   chineseTv.setText("哈哈哈");

這種方法是調用系統的fakebold方法實現加假的粗就是加細粗的方式,但是缺點是不能靈活控制大小,如果ui覺得大小還是不滿意的話我們可以使用二方法

第二種方法
在這裏插入圖片描述

1 默認字體
2 纖細粗
3 系統默認的bold

public class ThinBoldSpan extends CharacterStyle {

    private Context context;
    private float f;

    public ThinBoldSpan(Context context, float f) {
        this.context = context;
        this.f = f;
    }

    public static SpannableString getDeafultSpanString(Context context, String s) {
        return getSpanString(context, s,0.5f);
    }

    public static SpannableString getSpanString(Context context, String s,float f) {
        if (context == null || s == null) {
            return new SpannableString("");
        }
        SpannableString spannableString = new SpannableString(s);
        ThinBoldSpan span = new ThinBoldSpan(context, f);
        spannableString.setSpan(span, 0, s.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        return spannableString;
    }

    @Override
    public void updateDrawState(TextPaint tp) {
        tp.setStyle(Paint.Style.FILL_AND_STROKE);
        tp.setStrokeWidth(dpToPx(context, f));//控制字體加粗的程度
    }

    public int dpToPx(Context context, float dp) {
        DisplayMetrics metrics = context.getResources().getDisplayMetrics();
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, metrics);
    }
}

如何使用呢?

String s = "《未成年人保護法》";
 tv2.setText(ThinBoldSpan.getDeafultSpanString(this,s));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章