setspan字体加粗_如何实现 “中间这几个字要加粗,但是不要太粗,比较纤细的那种粗” ?...

分享一个最近做业务遇到的简单又蛮有意思的的文本显示处理过程。具体就是有这么一段文字,类似“转盘抽奖获得跑车x1,点击领取~”,用TextView显示。

设计师:“能让文字加粗吗?”

“可以”,然后加上了粗体属性android:textStyle="bold"。

android:id="@+id/tv_title"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center"

android:textStyle="bold"

android:textColor="#252525"

android:textSize="19sp"/>复制代码

不放截图了,效果你知道的。

设计师:“不不不,不是整体加粗,只要中间这几个字,就跑车x1加粗,其他文字不变。哦😯,或者前面的加上下花线”

“OK”,因为变成了文字分段显示成不同样式了,所以我换用了span来处理。

Spanny spanny = new Spanny("Underline text", new UnderlineSpan())

.append("\nBold text", new StyleSpan(Typeface.BOLD))

.append("\nPlain text");

textView.setText(spanny);复制代码

这里的Spanny是个很好用的Span工具类Spanny,可以便捷地将span设置到String上,顺便推荐一下。如果不用Spanny,效果自己按原生Api拼接也是一样的。

设计师:“为什么加粗会这么粗,iOS没有这么粗啊,不要这么粗,要纤细的那种粗!”

“@¥#%@@*&!微笑😊”

为什么会比iOS的粗,因为是系统字体不一样的原因,iOS 用的是Helvetica,安卓字体是Roboto,其字体本身就设计加粗效果就是这么粗。就没有办法了吗?有的。

可以换字体,比如light字体。但是不支持局部的加粗,总不能把文字切成3个textview来显示吧,不实际。×

span+画笔处理。 √

//没错,就几行代码这么简单

public class FakeBoldSpan extends CharacterStyle{

@Override

public void updateDrawState(TextPaint tp){

tp.setFakeBoldText(true);//一种伪粗体效果,比原字体加粗的效果弱一点

// tp.setStyle(Paint.Style.FILL_AND_STROKE);

// tp.setColor(Color.RED);//字体颜色

// tp.setStrokeWidth(10);//控制字体加粗的程度

}

}

//使用:

fakeBoldText.setText(new Spanny().append("FakeBold",new FakeBoldSpan()));复制代码

如图,依次是普通字体,加粗字体,比较纤细的那种粗——

2017.07.31 更新,有评论问到中文加粗怎么搞?

设置一下Span的画笔:

tp.setStyle(Paint.Style.FILL_AND_STROKE);

tp.setColor(Color.RED);//字体颜色

tp.setStrokeWidth(10);//控制字体加粗的程度复制代码

这里控制的是字体加粗的程度。有空再写个方便随意控制粗细度的方法吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值