在近期的项目中,需要实现多国语言的兼容。而在UI给出的一段文本中,需要设置多个字体颜色的效果,如下:
第一眼看到这个效果,马上就想到了可以用SpannableString来实现部分字体颜色的修改,但是要修改文字字体的颜色,我们必须知道开始修改的起始位置startIndex,和结束的位置endIndex。由于“中国”跟“Heidou”的内容是可变的,一般我们会在string.xml定义如下item:
<string name="spannable_string_test1">我来自%1$s,名字叫做%2$s</string>
我们会用两个占位符%1$s
以及%2$s
,然后在我们的代码中使用String.format()来替换我们真正的内容。
val str = String.format(getString(R.string.spannable_string_test1),content1,content2)
我们会很快的就写出了这段代码。但是当我们想要使用SpannableString来实现修改部分文字字体颜色时,会发现,content1以及content2的长度我们是不确定的,content1的长度可能是2、也可能是3或者是4,content1的长度不确定会直接影响到第二个占位符的起始位置startIndex。所以直接写死startIndex和endIndex的值是行不通的,除非能够确保每次content1以及content2的长度都是一样的。
假设content1和content2