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);
代码:
-
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);
8、最后再解释flags属性的使用:
对EditText使用SpannableString ,如果我们设置Spannable.SPAN_EXCLUSIVE_INCLUSIVE,在“晚上”前面和后面都输入文字,前面的文字没有任何效果,后面的则不同,添加上相同的Span特效,(前面不应用特效,后面应用特效),其它几个Flags参数的含义不再赘述。