SpannableString与SpannableStringBuilder使用【原创】
2016-03-30 16:54
681 查看
SpannableString与SpannableStringBuilder使用【原创】
1、SpannableString、SpannableStringBuilder与String的关系首先SpannableString、SpannableStringBuilder基本上与String差不多,也是用来存储字符串,但它们俩的特殊就在于有一个SetSpan()函数,能给这些存储的String添加各种格式或者称样式(Span),将原来的String以不同的样式显示出来,比如在原来String上加下划线、加背景色、改变字体颜色、用图片把指定的文字给替换掉,等等。所以,总而言之,SpannableString、SpannableStringBuilder与String一样, 首先也是传字符串,但SpannableString、SpannableStringBuilder可以对这些字符串添加额外的样式信息,但String则不行。
注意:如果这些额外信息能被所用的方式支持,比如将SpannableString传给TextView;也有对这些额外信息不支持的,比如前一章讲到的Canvas绘制文字,对于不支持的情况,SpannableString和SpannableStringBuilder就是退化为String类型,直接显示原来的String字符串,而不会再显示这些附加的额外信息。
2、SpannableString与SpannableStringBuilder区别
它们的区别在于 SpannableString像一个String一样,构造对象的时候传入一个String,之后再无法更改String的内容,也无法拼接多个 SpannableString;而SpannableStringBuilder则更像是StringBuilder,它可以通过其append()方法来拼接多个String;
3、SetSpan()
void setSpan (Object what, int start, int end, int flags)
函数意义:给SpannableString或SpannableStringBuilder特定范围的字符串设定Span样式,可以设置多个(比如同时加上下划线和删除线等),Falg参数标识了当在所标记范围前和标记范围后紧贴着插入新字符时的动作,即是否对新插入的字符应用同样的样式。
参数说明:
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 :前后都包括。
下面写了个小demo,先看一下效果图:
代码如下所示:
相关文章推荐
- 给UITextView 头部插入视图
- 用JS生成UUID的方法实例
- iOS程序-UITableView分组展示数据 - 纯手写代码
- QuickTest Professionar 快捷键
- ArrayBlockingQueue源码浅析
- UI设计中ID软件书籍排版时目录的制作你会吗?【太原UI设计师】分享
- iOS开发学习笔记——分段视图(UISegmentedControl)
- 应用自动布局让UITableviewCell自适应高度出现下面问题
- IOS开发-UI学习-UIImageView控件
- UIView的alpha、hidden和opaque属性之间的关系和区别
- 基于QtQuick2.0应用程序运行于XP系统的诸多问题
- 判断Android 系统是MIUI 的,魅族的Flyme ,还是原生的?
- ios UITableView性能优化
- UUID生成方法总结
- UIview需要知道的一些事情:setNeedsDisplay、setNeedsLayout
- Android UI设计——EditText
- HBase源码分析之KeyValue
- QSqlQuery的使用
- Android RoboGuice 使用指南
- 对于requirejs AMD模块加载的理解