SpannableString的用法详解
SpannableString能够更简便的设置文字样式。
知识准备:
方法: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:前后都不包括,即在指定范围的前面和后面插入新字符都不会应用新样式 Spannable.SPAN_EXCLUSIVE_INCLUSIVE:前面不包括,后面包括。即仅在范围字符的后面插入新字符时会应用新样式 Spannable.SPAN_INCLUSIVE_EXCLUSIVE:前面包括,后面不包括。 Spannable.SPAN_INCLUSIVE_INCLUSIVE:前后都包括。
flag的设置最后再说,这里先设为0。
1、设置颜色
String string = "今天晚上下雨啦!";
SpannableString spanColor = new SpannableString(string);
spanColor.setSpan(new ForegroundColorSpan(Color.parseColor("#ff3c2a")), string.indexOf("晚上"), string.indexOf("下"), 0);
mTv1.setText(spanColor);
复制代码 当然,也可以直接设置角标实现:
String string = "今天晚上下雨啦!";
SpannableString spanColor = new SpannableString(string);
spanColor.setSpan(new ForegroundColorSpan(Color.parseColor("#ff3c2a")), 2, 4, 0);
mTv1.setText(spanColor);
复制代码
2、设置背景颜色
代码:
String string = "今天晚上下雨啦!";
SpannableString spanColor = new SpannableString(string);
spanColor.setSpan(new BackgroundColorSpan(Color.parseColor("#ff3c2a")), string.indexOf("晚"), string.indexOf("下"), 0);
mTv1.setText(spanColor);
复制代码 3、设置字体大小
代码:
String string = "今天晚上下雨啦!";
SpannableString spanColor = new SpannableString(string);
spanColor.setSpan(new AbsoluteSizeSpan(25), string.indexOf("晚"), string.indexOf("下"), 0);
mTv1.setText(spanColor);
复制代码 4、设置粗斜体
代码:
String string = "今天晚上下雨啦!";
SpannableString spanColor = new SpannableString(string);
spanColor.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), string.indexOf("晚"), string.indexOf("下"), 0);
mTv1.setText(spanColor);
复制代码
5、删除线
代码:
String string = "今天晚上下雨啦!";
SpannableString spanColor = new SpannableString(string);
spanColor.setSpan(new StrikethroughSpan(), string.indexOf("晚"), string.indexOf("下"), 0);
mTv1.setText(spanColor);
复制代码 6、下划线
代码:
String string = "今天晚上下雨啦!";
SpannableString spanColor = new SpannableString(string);
spanColor.setSpan(new UnderlineSpan(), string.indexOf("晚"), string.indexOf("下"), 0);
mTv1.setText(spanColor);
复制代码 7、替换图片
代码:
String string = "今天晚上下雨啦!";
SpannableString spanColor = new SpannableString(string);
Drawable d = getResources().getDrawable(R.mipmap.ic_launcher);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
spanColor.setSpan(span, string.indexOf("晚"), string.indexOf("下"), 0);
mTv1.setText(spanColor);
复制代码
对EditText使用SpannableString ,如果我们设置Spannable.SPAN_EXCLUSIVE_INCLUSIVE,在“晚上”前面和后面都输入文字,前面的文字没有任何效果,后面的则不同,添加上相同的Span特效,(前面不应用特效,后面应用特效),其它几个Flags参数的含义不再赘述。
源码下载: