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