SpannableStringBuilder

来源:互联网 发布:联通关闭2g网络 编辑:程序博客网 时间:2024/05/17 21:49

一般情况下Android中显示文本一般使用TextView,有些时候文本包含一些特殊的字符图片或者同一文本的的样式、颜色不同,例如:

上图共有两个TextView,每个TextView的文本的字体颜色分为两部分,箭头一个颜色,文字一个颜色,这样便无法直接在TextView所在的xml中通过标签设置,这个时候便用到了SpannableStringBuilder了。先看一下这个类的继承关系:

android.text
类 SpannableStringBuilder

java.lang.Object  继承者 android.text.SpannableStringBuilder
所有已实现的接口:
Editable,GetChars,Spannable,Spanned,Appendable,CharSequence
在它实现的接口中有一个比较的常见CharSequence,TextView.setText的参数就是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);




0 0