对于同一字符串,如何在不同字段中设置不同颜色,如以下一段文字:
我偶然发现了红色的字段
如何将"红色的字段"设置为红色,或许我们在做项目会有这个需求,比如
做一个如上的需求,那么有些人就会自定义TextView,其实不用那么麻烦,完全可以一步到位的.
写一个方法,setTVColor,用来将所需文字进行颜色修改
/**
* 对指定字符设置颜色
* @param str
* 字符串
* @param ch1
* 切换颜色开始的字符
* @param ch2
* 切换颜色停止的字符
* @param color
* 设置的颜色
* @param tv
* TextView控件
*/
private void setTVColor(String str , char ch1 , char ch2 , int color , TextView tv){
int a = str.indexOf(ch1); //从字符ch1的下标开始
int b = str.indexOf(ch2)+1; //到字符ch2的下标+1结束,因为SpannableStringBuilder的setSpan方法中区间为[ a,b )左闭右开
SpannableStringBuilder builder = new SpannableStringBuilder(str);
builder.setSpan(new ForegroundColorSpan(color), a, b, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(builder);
}
这里解释以下SpannableStringBuilder
SpannableStringBuilder基本上与String差不多,也是用来存储字符串,但它们俩的特殊就在于有一个SetSpan()函数,能给这些存储的String添加各种格式或者称样式(Span),将原来的String以不同的样式显示出来,比如在原来String上加下划线、加背景色、改变字体颜色、用图片把指定的文字给替换掉,等等。
然后在onCreate中调用以下就可以了
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initTV();
}
private void initTV() {
tv = (TextView) findViewById(R.id.tv);
String str = "订单管理\n(3)";
setTVColor(str, '(', ')', Color.RED, tv);
}