Android SpannableString用法

只谈情不闲聊 提交于 2019-12-02 10:48:00

TextView算是Android开发中最最常用的控件了,有的时候,我们要给一个TextView中的显示的文字设置不同的样式或者响应事件,比如同一个TextView中,有的字是红色,有的字是蓝色,有的字点击之后有响应事件,有的点击之后没有响应事件,甚至我们想在TextView中显示一个数学公式等等。

那么对于形形色色的需求我们有没有解决方案呢?当然有,一种是使用HTML来解决,另一种就是使用SpannableString。

SpannableString其实和String一样,都是一种字符串类型,同样TextView也可以直接设置SpannableString作为显示文本,不同的是SpannableString可以通过使用其方法setSpan方法实现字符串各种形式风格的显示,重要的是可以指定设置的区间,也就是为字符串指定下标区间内的子字符串设置格式。

setSpan(Object what, int start, int end, int flags)方法需要用户输入四个参数,what表示设置的格式是什么,可以是前景色、背景色也可以是可点击的文本等等,start表示需要设置格式的子字符串的起始下标,同理end表示终了下标,flags属性就有意思了,共有四种属性:

  • Spanned.SPAN_INCLUSIVE_EXCLUSIVE从起始下标到终了下标,包括起始下标

  • Spanned.SPAN_INCLUSIVE_INCLUSIVE从起始下标到终了下标,同时包括起始下标和终了下标

  • Spanned.SPAN_EXCLUSIVE_EXCLUSIVE从起始下标到终了下标,但都不包括起始下标和终了下标

  • Spanned.SPAN_EXCLUSIVE_INCLUSIVE从起始下标到终了下标,包括终了下标

ForegroundColorSpan,为文本设置前景色,效果和TextView的setTextColor()类似

BackgroundColorSpan,为文本设置背景色,效果和TextView的setBackground()类似

RelativeSizeSpan,设置文字相对大小,在TextView原有的文字大小的基础上,相对设置文字大小

StrikethroughSpan,为文本设置中划线,也就是常说的删除线

UnderlineSpan,为文本设置下划线

SuperscriptSpan,设置上标, 结合RelativeSizeSpan设置小字体文本作为上标,分分钟实现指数公式

SubscriptSpan,设置下标,功能与设置上标类似

StyleSpan,为文字设置风格(粗体、斜体),和TextView属性textStyle类似

ImageSpan,设置文本图片, 加一个解析算法,将文本中特定的文本转换成特定的表情图片,分分钟实现聊天表情显示效果

ClickableSpan,设置可点击的文本,设置这个属性的文本可以相应用户点击事件,至于点击事件用户可以自定义,就像效果图显示一样,用户可以实现点击跳转页面的效果

URLSpan,设置超链接文本,其实聪明的小伙帮在讲到ClickableSpan的时候就能实现超链接文本的效果了,重写onClick点击事件就行

SpannableStringBuilder

应该有不少开发的小伙伴知道StringBuilder,可以使用append()方法实现字符串拼接,非常方便。

同样,SpannableString中也有SpannableStringBuilder,顾名思义,就是实现对SpannableString的一个拼接效果,同样是append()方法,可以实现各种风格效果的SpannableString拼接,非常实用。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!