SpannableStringBuilder 笔记
在学习富文本的过程中发现了这个知识点。SpannableStringBuilder实现了CharSequence接口,用法类似StringBuilder。可以为其包含的字符串设置样式。在设计自定义Label时会很实用。
需要注意的是,虽然其可以直接作为参数放入TextView中,不过由于Canvas并不适配这个类,所以在其中使用这个类等同于使用普通的字符串。
关键方法
-
void setSpan(Object what, int start, int end, int flags) -
SpannableStringBuilder append(CharSequence text, Object what, int flags)
实际上两个方法类似,都需要一个参数what和flags。方法1的剩余参数分别为需要设置的字符起点、终点。这没啥好说的,跟substring的那两个参数一样。方法2就不必说了,现在说说共有的两个参数
what是一个Span类型的参数,用于确定现在的样式。是整个方法的关键。flags参数用于确定样式的作用范围。该参数需求以下四个常量值:
- Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:仅仅作用于当前选中范围内
insert()的字符串 - Spannable.SPAN_EXCLUSIVE_INCLUSIVE:作用于当前选中字符串之后
insert()的字符串 - Spannable.SPAN_INCLUSIVE_EXCLUSIVE:作用于当前选中的字符串之前
insert()的字符串 - Spannable.SPAN_INCLUSIVE_INCLUSIVE:无论前后都有效
注意,该参数仅对使用insert()方法插入的字符串有效,且插入的位置必须紧贴选中的字符串。否则不会有效果
参数 what
参数what接收一个CharacterStyle的子类。一般常用如下几个实体类
ForegroundColorSpan(字体颜色)
可以接受一个颜色参数,用于改变字体颜色
BackgroundColorSpan(背景颜色)
可以接受一个颜色参数,用于改变背景颜色
AbsoluteSizeSpan(字体大小)
接受一个int参数和一个布尔值,前者为尺寸,后者用于判断单位是否是dip。true为dip,false则为px。该参数默认为false
StyleSpan(字体样式)
接受常量参数,如Typeface.BOLD_ITALIC。用于确定字体样式
UnderlineSpan(下划线)
无参构造器,加下划线
多样式
可以为一组字符串设置多种样式,只需要多次set不同的Span即可。
注意,若set同种样式,后添加的span会覆盖前者
本文介绍了SpannableStringBuilder在富文本处理中的应用,包括关键方法、参数what的使用,以及如何设置字体颜色、背景颜色、大小、样式和下划线等。通过示例展示了如何为字符串设置多种样式,并解释了样式作用范围的参数Spannable.SPAN_常量。
5574

被折叠的 条评论
为什么被折叠?



