Android 如何批量改变字体颜色

有时候,UI设计师的输出给开发同事的文案会对一行文字中某些文字进行颜色的单独处理,如下面这种效果,包含多处需要进行变色处理。

 

一般能想到的就是用textview将文字整体显示出来,然后在使用Android提供的

ForegroundColorSpan类对不同颜色的文字进行处理,但实际在开发的时候,发现了以下问题:

1、使用ForegroundColorSpan类对第一处的“部分”文字处理后,后边的“变色”字样按同样的方式处理后,其效果一直无法正常显示,“部分”字样无法变色,“变色”字样变色正常,只有最后一次变色才有效果;

2、textview在不同语言上显示文案不同,如英文文案的时候,怎么去查找“部分”和“变色”关键字的部分进行颜色处理,就不能按关键字进行匹配寻找需要处理的部分;

经过试验,和请教同事,参考网络上的做法,发现下面方法可行。

具体示例如下,和上面的最初的实例有所不同,但原理类似:

因为中英文时都需要匹配到可以进行颜色处理的部分,那我需要替换的实例中的“1米”和“语音”这两部分就在中英文状态下需要可以被检测到此部分的位置,找准位置后在进行动态替换颜色即可。

具体步骤如下:

1、为了可以准确替换需要变色的文字,故需要将需要替换的部分都定义为变量,便于后面查找和替换;另外,中英文时此两部分替换的文字有所不同,需要替换的文字按中英文进行单独定义;

中文下:

 

英文下:

 

2、用String.format函数动态替换变量1和变量2为不同的文案,中英文下生成不同的文案;

 

3、动态获取需要替换的变量的下标和长度,用ForegroundColorSpan进行颜色替换成蓝色,此时中英文下都可以满足变色的要求;而问题1只有最后一处字样变色的问题,是一个ForegroundColorSpan只能作用一次,下次会失效,如果需要多处变色,每次都需要重新new一个对象进行单独处理才行。

 

最后显示出来的效果如下:

 

 

猜你喜欢

转载自blog.csdn.net/bukker/article/details/80443665
今日推荐