有时候我们经常需要设定指定文字的颜色,比如查询到的文字设置成和其它不一样的颜色,高亮显示,刚刚我试了效果还不错,特放上来留着笔记,以后直接来copy就可以了,我是个懒虫,核心代码如下
//test====================================
这些我是写在BaseAdapter里面的getView方法里的,因这些个数据是在listView中的,所以设了几个标记
if(isColor && null != strColor && (list.get(position).getContent()).lastIndexOf(strColor)!= -1){
LogWrapper.i("longlong", "test===================");
SpannableString span = new SpannableString(list.get(position).getContent());
span.setSpan(new ForegroundColorSpan(Color.GREEN),
(list.get(position).getContent()).lastIndexOf(strColor),
(list.get(position).getContent()).lastIndexOf(strColor)+strColor.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
holder.content.setText(span);
}
//test=================================================
else{
LogWrapper.i("longlong","test===================else");
holder.content.setText(list.get(position).getContent());
}
//下面这个是从网上得来的,觉得还不错,也试了下,他的是过滤掉了其它不匹配的字符,觉得有用,收藏如下
TextView tv = (TextView) findViewById(R.id.hello);
SpannableString s = new SpannableString(getResources().getString(R.string.linkify));
Pattern p = Pattern.compile("abc");
Matcher m = p.matcher(s);
while (m.find()) {
int start = m.start();
int end = m.end();
s.setSpan(new ForegroundColorSpan(Color.RED), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
tv.setText(s);
//下面这个听说是前景色用的,我还没试过,觉得有用,先收下了
//下面这些个没试过,听说效果更牛,这么晚了,先不试了,先收了,
可以使用以下两种方法来实现:
1.用Html类的fromHtml()方法格式化要放到TextView里的文字。这种方法不仅能够高亮部分文字,而且还能够使用HTML里面方式来格式化文字,显示出各种效果。
上述代码把hello设置成红色。
2.使用Spannable或实现它的类,如SpannableString。Spannable对象也可以实现一样的效果
上述代码把[2,4)之间的字符设置成红色,也就是c和d。