给TextView增加样式
一.导引
1.适用对象
没有接触过SpannableString的人
听过但是不熟悉不了解SpannableString的人。
2.教程结构
- 简介
- SpannableString
- SpannableStringBuilder
- 实战部分
- 总结和感想(作者瞎逼逼时间)
二.正文
1.简介
SpannableString和SpannableStringBuilder的关系类似于String和StringBuilder。前者不可变,后者可变。所以两者的使用方法基本相同。
功能在于给一串普通的字符串加上颜色,大小背景等样式和特殊事件(点击事件)。下面先上一个例子
这个例子很普通,小伙伴们一看可能会觉得这不就是几个TextView吗?
没错,这就是TextView。但不是几个,而是一个,只用一个TextView显示出这串花花绿绿的文字是不是很?的感觉呢?
这个时候可能有小伙伴会说:“一个TextView?也简单啊,我写成html,加点color,background样式,然后用 Html.fromHtml( ) 一下还不是轻轻松松,要你这破Span啥啥的干啥用!”
没错,这样子是能实现这个效果,但是你们不觉得一串串html的代码硬编码在Android项目里很难看么!而且经过我对 Html.fromHtml( ) 的源码的研究发现,这个方法并没有什么神秘之处(能够DuangDuang的就给文字加特技,呸! 加样式)。
mSpannableStringBuilder = new SpannableStringBuilder();
if (end == start) {
mSpannableStringBuilder.removeSpan(obj[i]);
} else {
mSpannableStringBuilder.setSpan(obj[i], start, end, Spannable.SPAN_PARAGRAPH);
}
上面是截取了部分Html.fromHtml( ) 方法调用的源码。细心的小伙伴们肯定发现了,这里面出现了个SpannableStringBuilder()。所以一切真相大白了,原来该方法将html解析之后通过SpannableStringBuilder来给他添加样式。看到这的小伙伴们是不是学会用SpannableStringBuilder很有用了呢!?
2.SpannableString
SpannableString ss=new SpannableString("这是另外一串普通的文字");
ForegroundColorSpan colorSpan=new ForegroundColorSpan(Color.RED);
ss.setSpan(colorSpan,0,5,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(ss);
使用方法和SpannableStringBuilder类似,简单举个例子,不做过多的解释。
3.SpannableStringBuilder
本章的主角,SpannableString的好基友。
class SpannableStringBuilder implements CharSequence, GetChars, Spannable, Editable,
Appendable, GraphicsOperations{}
//这里主要注意CharSequence和Spannable
//继承自Spannable,赋予了它给文本设定样式的基础功能
//实现接口