一般情况下Android中显示文本一般使用TextView,有些时候文本包含一些特殊的字符图片或者同一文本的的样式、颜色不同,例如:
上图共有两个TextView,每个TextView的文本的字体颜色分为两部分,箭头一个颜色,文字一个颜色,这样便无法直接在TextView所在的xml中通过标签设置,这个时候便用到了SpannableStringBuilder了。先看一下这个类的继承关系:
android.text
类 SpannableStringBuilder
java.lang.Objectandroid.text.SpannableStringBuilder
-
所有已实现的接口:
- Editable, GetChars, Spannable, Spanned, Appendable, CharSequence
因此这里可以直接使用setText方法来设置。下面看一下SpannableStringBuilder的一些方法:
setSpan(Object what, int start, int end, int flags)
Mark the specified range of text with the specified object.
第一个参数:what是具体要实现的效果的样式,有好多种常用的有:
SubscriptSpan 下标、SuperscriptSpan 上标、URLSpan、UnderlineSpan、ImageSpan、ForegroundColorSpan背景颜色。
start和end是需要使用what样式的文本的位置。
flags是参数系统提供了4个常量,主要是决定了是否包含start、end所在的下标字符
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE ---> 不包含两端start和end所在的端点
Spanned.SPAN_EXCLUSIVE_INCLUSIVE ---> 不包含端start,但包含end所在的端点
Spanned.SPAN_INCLUSIVE_EXCLUSIVE ---> 包含两端start,但不包含end所在的端点
Spanned.SPAN_INCLUSIVE_INCLUSIVE ---> 包含两端start和end所在的端点
上面例子中的实现参考代码如下:
static ForegroundColorSpan redSpan = new ForegroundColorSpan(Color.RED);
SpannableStringBuilder builder;
int start = str.indexOf("↑");
builder = new SpannableStringBuilder("↑hhsd");
builder.setSpan(redSpan, start, start + 1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);