前言
在客户端开发中,我们往往需要对一个TextView的文字的部分内容进行特殊化处理,比如加粗、改变颜色、加链接、下划线等。iOS为我们提供了AttributedString,而Android则提供了SpannableString。
在Android的android.text.style包下为我们提供了各种各样的span(可以参考这篇文章),例如:
AbsoluteSizeSpan(int size) —— 设置字体大小,参数是绝对数值,相当于Word中的字体大小
RelativeSizeSpan(float proportion) —— 设置字体大小,参数是相对于默认字体大小的倍数,比如默认字体大小是x, 那么设置后的字体大小就是x*proportion,这个用起来比较灵活,proportion>1就是放大(zoom in), proportion<1就是缩小(zoom out)
BackgroundColorSpan(int color) —— 背景着色,参数是颜色数值,可以直接使用android.graphics.Color里面定义的常量,或是用Color.rgb(int, int, int)
ForegroundColorSpan(int color) —— 前景着色,也就是字的着色,参数与背景着色一致
问题
网上已经有着很多使用这些span的教程了,所以没必要在这里继续探讨这些基础使用了。但是,如果使用了AbsoluteSizeSpan(int size) 在同一个TextView中定义了不同字体大小,就会默认显示成底部对齐的方式:
说到这里,第一反应肯定是tv.setGravity(Gravity.CENTER_VERTICAL),但是很不幸,怎么试都不凑效。那么到底有没有办法使用Span让不同字体大小的垂直居中呢?
答案是:当然可以,得用ReplacementSpan
分析
为何是Repla