要查看这二者的区别的,最好的办法就是看他们各方有啥方法,也许二者之间的区别就很快看的出来,
SpannableString ss = new SpannableString("欢迎来到杭州");
SpannableStringBuilder ssb = new SpannableStringBuilder("欢迎来到杭州");
SpannableStringBuilder 有append方法,你想到了什么,是不是想到了Java中的String和StringBuidler,是的,一个可以对String可以添加操作,
这二个类都有一个重要的方法:setSpan()
void setSpan (Object what, int start, int end, int flags)
函数意义:给SpannableString或SpannableStringBuilder特定范围的字符串设定Span样式,可以设置多个(比如同时加上下划线和删除线等),Falg参数标识了当在所标记范围前和标记范围后紧贴着插入新字符时的动作,即是否对新插入的字符应用同样的样式。(这个后面会具体举例说明)
参数说明:
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:前后都包括
1):改变字体颜色
//改变字体颜色
//先构造SpannableString
SpannableString spanString = new SpannableString("欢迎光临杭州,这里人美");
//再构造一个改变字体颜色的Span
ForegroundColorSpan span = new ForegroundColorSpan(Color.BLUE);
//将这个Span应用于指定范围的字体
spanString.setSpan(span, 1, 3, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
//设置给EditText显示出来
et_phone.setText(spanString);
2):改变字体大小
SpannableString spanString = new SpannableString("欢迎来到杭州滨江星光大道玩");
AbsoluteSizeSpan span = new AbsoluteSizeSpan(16);
spanString.setSpan(span, 2, 5, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
et_phone.setText(spanString);
StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC);
spanString.setSpan(span, 1, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
et_phone.setText(spanString);
4):给文字添加删除线
SpannableString spanString = new SpannableString("欢迎光临杭州滨江和瑞科技园");
StrikethroughSpan span = new StrikethroughSpan();
spanString.setSpan(span, 2, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
et_phone.setText(spanString);
5):添加下划线
SpannableString spanString = new SpannableString("欢迎光临杭州滨江和瑞科技园");
UnderlineSpan span = new UnderlineSpan();
spanString.setSpan(span, 1, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
et_phone.setText(spanString);
6):图片置换(ImageSpan)