大家好,又是新的一周!今天给大家带来 带心情去旅行 的投稿,分析了 SpannableStringBuilder 的一些用法。希望能帮助到大家! 带心情去旅行 的博客地址:
什么都不说,先看个炫酷的效果。 ‘什么,这也算炫酷?’也许你会这么说 如果我告诉你,这个页面中只用了一个 TextView 呢 ?你没看错!只有一个TextView,没别的! 是时候把 SpannableStringBuilder 介绍给大家了,先看看Google官方的介绍:
不同于我们平时赋值使用的 String、StringBuffer 等,只能给 TextView 设置文本内容,而文本的样式只能用 TextView 来控制,而且该样式的可定制性还不大好。 SpannableStringBuilder 有个亲兄弟——SpannableString。是不是觉得有点熟悉?似乎看到了 StringBuilder、String 的影子... 是的,SpannableStringBuilder 和 SpannableString 的区别类似与 StringBuilder、String,就是 SpannableStringBuilder 可以拼接,而 SpannableString 不可拼接。 由图中可以看出,他们都继承了 CharSequence,因此,他们可以直接在 TextView 的 setText 中使用。 SpannableStringBuilder 和 SpannableString 主要通过使用 setSpan(Object what, int start, int end, int flags) 改变文本样式。 对应的参数:
SpannableStringBuilder 和 SpannableString 的用法差不多,这边先举一个 SpannableString 的例子。 SpannableString 修改字体颜色: 创建 SpannableString 的时候,传入需要显示的字符串。使用 ForegroundColorSpan 为文字设置颜色,效果: 后面都以 SpannableStringBuilder 为例子。 SpannableStringBuilder
这里就可以看出 SpannableStringBuilder 的可拼接性,这里同样采用了 ForegroundColorSpan 为文本设置颜色,效果:
使用 BackgroundColorSpan 设置背景颜色,效果:
使用 AbsoluteSizeSpan 设置字体大小,效果:
使用 StyleSpan 设置粗体\斜体,从例子中可以看出,多次使用setSpan并不影响,效果:
StrikethroughSpa 使用 StrikethroughSpan 设置删除线,效果:
使用 UnderlineSpan 设置下划线,效果:
不仅支持文字样式,还可以插入图片。厉害了我的SpannableStringBuilder~~ 使用 ImageSpan 设置图片,将 index 为 6、7 的字符替换成了图片,也就是说,该图片占有 index 6 和 7 的位置,效果:
插入图片就已经很变态了,居然还支持点击事件。 使用 ClickableSpan 设置点击事件,最后还需要加上 textView.setMovementMethod(LinkMovementMethod.getInstance());。代码中指定 index 为 5、6、7 的字符都成了可点击的文本,其他区域还是不可点击的,效果: 有同学反映设置部分点击事件后,还需要给整个TextView单独设置点击事件时会出问题。想知道什么问题?自己去试试看,哈哈哈~~ 这边有一个我在CSDN上看到的解决方法,可以从另一个角度来解决这个问题:
当然,上面的这些用法都能组合使用。来个?? 例子中将 ImageSpan、 ClickableSpan、 ForegroundColorSpan、BackgroundColorSpan 进行了组合使用,大家可以根据自己的需求,来随意搭配,效果:(就是刚开始展示的那张gif) 看完后,感觉 SpannableStringBuilder 和 SpannableString 相比 String 要强大太多了。额~~没别的了 源码地址:
参考资料:
每天学习累了,看些搞笑的段子放松一下吧。关注最具娱乐精神的公众号,每天都有好心情。 |
|
来自: 个人文档awpyia > 《android ui》