SpannableStringBuilder实现TextView富文本

开发中TextView都是固定了样式,有时候就会要求同一行中显示字体大小,颜色不一样的。这种要求也很简单,用多个TextView就可以了。但是每次这样写会显得很累赘。这时候SpannableStringBuilder就起很大的作用了。

首先看看什么是SpannableStringBuilder?SpannableStringBuilder其实跟String是一样的,但是它拓展性比较强,它能给存储的字符增加各种样式,比如颜色变化,大小,线条等等。用它就可以来做一个富文本显示了。

SpannableStringBuilder设置各种各样的样式是通过setSpan()这个方法来实现的。

/**
 * Mark the specified range of text with the specified object.
 * The flags determine how the span will behave when text is
 * inserted at the start or end of the span's range.
 */
public void setSpan(Object what, int start, int end, int flags) {
    setSpan(true, what, start, end, flags, true/*enforceParagraph*/);

}

这里的what就是针对各种样式的不同对象了。这里列举一些: 

* BackgroundColorSpan : 文本背景色
* ForegroundColorSpan : 文本颜色
* AbsoluteSizeSpan : 文本字体(绝对大小)
* RelativeSizeSpan : 相对大小(文本字体)
* ImageSpan : 图片
* StrikethroughSpan : 删除线
* ScaleXSpan : 基于x轴缩放
* StyleSpan : 字体样式:粗体、斜体等
* SuggestionSpan : 相当于占位符
* DynamicDrawableSpan : 设置图片,基于文本基线或底部对齐。
* MaskFilterSpan : 修饰效果,如模糊(BlurMaskFilter)浮雕
* UnderlineSpan : 下划线
* RasterizerSpan : 光栅效果
* SubscriptSpan : 下标(数学公式会用到)
* SuperscriptSpan : 上标(数学公式会用到)
* TextAppearanceSpan : 文本外貌(包括字体、大小、样式和颜色)
* TypefaceSpan : 文本字体
* URLSpan : 文本超链接
* ClickableSpan : 点击事件

 start 跟 end 就是应用这个span对应的下标,注意应用时时包含start,但是不会包括end。

flags就是一种应用模式:

1.SPAN_EXCLUSIVE_INCLUSIVE:Span前输入的字符不应用 span 效果,Span后输入的字符不应用 span 效果
2.SPAN_INCLUSIVE_EXCLUSIVE:Span前输入的字符应用 span 效果,Span后输入的字符不应用 span 效果
3.SPAN_INCUJSIVE_INCLUSIVE:Span前输入的字符应用 span 效果,Span后输入的字符也应用 span 效果
4.SPAN_EXCLUSIVE_EXCLUSIVE:Span前输入的字符不应用 span 效果,Span后输入的字符也不应用 span 效果

如果是在编辑框Editext上应用span的话,这个flags就会应用上去,如果是一个固定文本的话,无论你选择哪种flags,效果上是一样的,没什么区别。 

列举个实战例子:

SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append("哈哈哈哈哈哈哈哈哈哈哈哈哈哈");
ForegroundColorSpan span = new ForegroundColorSpan(Color.GREEN);
builder.setSpan(span,2,4,SpannableStringBuilder.SPAN_INCLUSIVE_INCLUSIVE);
textView.setText(builder);

运行效果图:

SpannableStringBuilder实现TextView富文本_第1张图片

把下标为2,3的文本颜色修改成了绿色了。

以上就是SpannableStringBuilder的基本使用方法了跟介绍了。再也不用为了写个颜色多样的文本而布局多个TextView控件了。最后为了让自己更加方便快捷的使用这个SpannableStringBuilder当然是把它封装成工具类啦。文章就不贴出了,相信大家都会QAQ.

你可能感兴趣的:(SpannableStringBuilder实现TextView富文本)