TextView+SpannableString实现Android中富文本的显示及点击冲突解决

前言

最近项目中需要实现一个文章跟读效果的显示,还要能够点击文章中的单词能够弹出对话框显示单词的英美发音,那么如何实现这样的需求呢?当然是利用SpannableString啦,下面就结合项目中使用到的和参考其他博客的成果,整理一下常用的用法吧。
SpannableString其实很多方法和属性与String类似,只不过它比普通的字符串多了能够带有一些富文本属性,比如显示不同颜色、带下划线删除线等等。有心的读者一定想到了那是否有和StringBuilder对应的呢?答案是肯定的,那就是SpannableStringBuilder。显示富文本最重要的一个方法就是
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 前面不应用,后面应用

常见用法

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

 SpannableString spannableString = new SpannableString("前景色为蓝色");
spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#0000FF")),  0 , spannableString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); 
textView.setText(spannableString);

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

new BackgroundColorSpan(Color.parseColor("#0000FF"))

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

new StrikethroughSpan()

4.UnderlineSpan,为文本设置下划线,但线的大小和颜色能否设置呢?我没找到具体的方法,还请知道的小伙伴指点一二。

new UnderlineSpan()   

5.SuperscriptSpan,设置上标,即类似数学公式中或标注的上标效果

new SuperscriptSpan()

但这样直接设会使得上标的文字大小和正常文本大小一样,如果要使上标文字稍微小一点怎么办呢?这就需要下面即将讲到的 RelativeSizeSpan实现相对字体大小。

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

 new SubscriptSpan()

7.StyleSpan, 设置文字的显示风格(粗体、斜体),和TextView属性textStyle类似

new StyleSpan(Typeface.ITALIC) //设置斜体
new StyleSpan(Typeface.BOLD) //设置粗体   

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

new RelativeSizeSpan(1.2f) 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vinson武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值