目录
我们都会遇到UI给的效果图中,一段文字,却用不同的颜色显示关键字以突出重点。我们平常用到都是使用TextView设置textColor就可以了,如何设置多种颜色呢,有两种方法:
比如说我们想要实现以下效果的一段文字:
1、天气不错,适合露营
2、这里有一条河流,也可以去钓鱼
我们可以把这段文字分成4个部分,分别是 “1、天气不错,适合”,“露营”,“2、这里有一条河流,也可以去”,“钓鱼”
一、使用HTML 、strings.xml 辅助完成
1、首先在 strings.xml 文件中添加:
<string name="black_red"><Data><![CDATA[<font color="#000000">%1$s</font><font color="#ff0000">%2$s</font><font color="#000000">%3$s</font><font color="#ff0000">%4$s</font>]]></Data></string>
2、在Activity中给需要设置多种颜色的TextView设置如下代码:
textView.setText(Html.fromHtml(context.getResources().getString(R.string.black_red,“1、天气不错,适合”,“露营<br>”,“2、这里有一条河流,也可以去”,“钓鱼”)));
注:<br> 只是用来换行
二、SpannableStringBuilder 来实现
首先,需要把这段文字声明成一个字符串:
String content= "1、天气不错,适合露营\n2、这里有一条河流,也可以去钓鱼"
注:\n 只是用来换行
SpannableStringBuilder builder=new SpannableStringBuilder(content);
ForegroundColorSpan buleSpan1 = new ForegroundColorSpan(Color.parseColor("#ff0000"));
ForegroundColorSpan buleSpan2 = new ForegroundColorSpan(Color.parseColor("#ff0000"));
/**
* start:需要替换颜色的字符串的起始位置(从0开始) end:结束位置
*/
builder.setSpan(buleSpan1, 9, 10, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
builder.setSpan(buleSpan2, 26, 27, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
注:始末下表数的填写和 Spannable.SPAN_INCLUSIVE_INCLUSIVE 有关,可以选择是否包含这两个下标的字符。