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拼接,非常实用。
来源:https://blog.csdn.net/johnWcheung/article/details/102753142