最近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));