SpannableStringBuilder Spannabl
2016-08-01 本文已影响68人
Longmaxie
- 与String 关系
二者和String 一样用来存储字符串,但它们俩的特殊就在于有一个SetSpan(),能给这些存储的String添加各种格式或者称样式(Span),将原来的String以不同的样式显示出来,比如在原来String上加下划线、加背景色、改变字体颜色、用图片把指定的文字给替换掉,等等
2.二者区别
区别在于 SpannableString像一个String一样,构造对象的时候传入一个String,
之后再无法更改String的内容,也无法拼接多个 SpannableString;
而SpannableStringBuilder则更像是StringBuilder,它可以通过其append()方法来拼接多个String。
eg 1: 使用SpannableString,必须一次传入,构造完成
SpannableString ss= new SpannableString("欢迎光临longmaxie的主页");
eg 2 :使用SpannableStringBuilder,可以使用append()再添加
SpannableStringBuilder ssb= new SpannableStringBuilder();
ssb.append("欢迎光临");
ssb.append("longmaxie");
ssb.append("主页");
因为Spannable等最终都实现了CharSequence接口,所以可以直接把SpannableString和SpannableStringBuilder通过TextView.setText()设置给TextView。
- void setSpan (Object what, int start, int end, int flags)
给SpannableString或SpannableStringBuilder特定范围的字符串设定Span样式,
可以设置多个(比如同时加上下划线和删除线等),Flag参数标识了当在所标记范围前和标记范围后紧贴着插入新字符时的动作,即是否对新插入的字符应用同样的样式
参数说明:
object what :对应的各种Span;
int start:开始应用指定Span的位置,索引从0开始
int end: 结束应用指定Span的位置,特效并不包括这个位置。比如如果这里数为3(即第4个字符),第4个字符不会有任何特效。
int flags:取值有如下四个:
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前后都不包括,即在指定范围的前面和后面插入新字符都不会应用新样式
Spannable.SPAN_EXCLUSIVE_INCLUSIVE :前面不包括,后面包括。即仅在范围字符的后面插入新字符时会应用新样式
Spannable.SPAN_INCLUSIVE_EXCLUSIVE :前面包括,后面不包括。Spannable.SPAN_INCLUSIVE_INCLUSIVE :前后都包括。