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);
代码:
String string = "今天晚上下雨啦!";
SpannableString spanColor = new SpannableString(string);
spanColor.setSpan(new AbsoluteSizeSpan(25), string.indexOf("晚"), string.indexOf("下"), 0);
mTv1.setText(spanColor);
代码:
String string = "今天晚上下雨啦!";
SpannableString spanColor = new SpannableString(string);
spanColor.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), string.indexOf("晚"), string.indexOf("下"), 0);
mTv1.setText(spanColor);
代码:
String string = "今天晚上下雨啦!";
SpannableString spanColor = new SpannableString(string);
spanColor.setSpan(new StrikethroughSpan(), string.indexOf("晚"), string.indexOf("下"), 0);
mTv1.setText(spanColor);
代码:
String string = "今天晚上下雨啦!";
SpannableString spanColor = new SpannableString(string);
spanColor.setSpan(new UnderlineSpan(), string.indexOf("晚"), string.indexOf("下"), 0);
mTv1.setText(spanColor);
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参数的含义不再赘述。
GitHub全部代码已传