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));
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值