写在前面
最近,在公司的项目中需要将一段文字分别涂上两种不同的颜色,最笨重的解决办法就是用多个TextView相互进行拼接显示,但是不光让业务逻辑变得繁杂,也让代码可靠性降低,因此本文介绍两种可以实现在同一个TextView下展示不同色彩的方法,如下图所示:
其中涉及到的是SpannableString等相关的类知识,当然String是一个既基础也复杂的对象类,所以在文章开头会阐述String、StringBuffer和StringBuilder的应用对比,话不多说,开始吧。
String、StringBuffer、StringBuilder
在Java和Android中,对于字符串来说常用的除了String以外,还有StringBuffer和StringBuilder这两种,这也是校招必备的知识要点之一,所以先用一张表来谈谈这三者的区别:
名字 | 说明 | 线程安全 |
---|---|---|
String | 不可变序列 | |
StringBuffer | 可变序列 | 安全 |
StringBuilder | 可变序列 | 非线程安全 |
由此可见,三者最大的不同点主要在于两个方面,一个是否可变序列、另一个则关乎于是否为线程安全,什么叫不可变序列呢?看下列代码:
String str = "hello ";
String str1 = str + "word";
if (str == str1) {
Log.d(TAG, "str与str1为同一对象:" + true);
} else {
Log.d(TAG, "str与str1为同一对象:" + fa