前言
最近项目中需要实现一个文章跟读效果的显示,还要能够点击文章中的单词能够弹出对话框显示单词的英美发音,那么如何实现这样的需求呢?当然是利用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)