Spannable和SpannableStringBuilder
1.和String的关系
这三个玩意都是用来存储字符串的,但和String不同的是前面那两兄弟有一个
setSpan()方法,这个方法可以给存储的字符串添加各种样式,而String不行
2.SpannableString和SpannableStringBuilder的区别
SpannableString无法拼接字符串,而SpannableStringBuilder类似于StringBuilder,
可以通过append方法来拼接多个字符串
3.void setSpan (Object what, int start, int end, int flags)
参数说明:
object what :对应的各种Span,后面会提到;
int start:开始应用指定Span的位置,索引从0开始
int end:结束应用指定Span的位置,特效并不包括这个位置。比如如果这里数为3(即第4个字符),第4个字符不会有任何特效
int flags:取值有如下四个
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:以start和end为界,前后都不包括,即在指定范围的前面和后面插入新字符都不会应用新样式
Spannable.SPAN_EXCLUSIVE_INCLUSIVE:前面不包括,后面包括。即仅在范围字符的后面插入新字符时会应用新样式
Spannable.SPAN_INCLUSIVE_EXCLUSIVE:前面包括,后面不包括
Spannable.SPAN_INCLUSIVE_INCLUSIVE:前后都包括。
4.各种Span类型
(1)字体颜色设置
SpannableString spanString = new SpannableString("欢迎光临我的博客");
ForegroundColorSpan span = new ForegroundColorSpan(Color.BLUE);
spanString.setSpan(span, 1, 5, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
et.setText(spanString);
(2)字体背景颜色
BackgroundColorSpan span = new BackgroundColorSpan(Color.YELLOW);
(3)字体大小
AbsoluteSizeSpan span = new AbsoluteSizeSpan(16);
(4)粗体、斜体
StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC);
(5)删除线
StrikethroughSpan span = new StrikethroughSpan();
(6)下划线
UnderlineSpan span = new UnderlineSpan();
(7)图片置换
SpannableString spanString = new SpannableString("欢迎光临我的博客");
Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
spanString.setSpan(span, 2, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
editText.setText(spanString);