分享一个最近作业务遇到的简单又蛮有意思的的文本显示处理过程。具体就是有这么一段文字,相似“转盘抽奖得到跑车x1,点击领取~”,用TextView显示。java
“能够”,而后加上了粗体属性android:textStyle="bold"。android
<TextView 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"/>复制代码
不放截图了,效果你知道的。ios
“OK”,由于变成了文字分段显示成不一样样式了,因此我换用了span来处理。git
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拼接也是同样的。github
“@¥#%@@*&!微笑😊”
为何会比iOS的粗,由于是系统字体不同的缘由,iOS 用的是Helvetica,安卓字体是Roboto,其字体自己就设计加粗效果就是这么粗。就没有办法了吗?有的。app
span+画笔处理。 √ ide
//没错,就几行代码这么简单
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);//控制字体加粗的程度复制代码
这里控制的是字体加粗的程度。有空再写个方便随意控制粗细度的方法吧。spa