首先放一张效果图:
安卓中有如下的方法来修改特定位置的字体颜色,但是缺陷是只能设置指定范围的,比如从第二个开始,到第3个结束,而不能设置指定规则的。
int start=2;
int end=3;
tv=new TextView(context);
SpannableStringBuilder style=new SpannableStringBuilder(str);
style.setSpan(new ForegroundColorSpan(Color.RED),start,end,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(style);
这时候就用到了我们神通广大的正则表达式,只要设定了规则,我们就可以通过这个规则去找出来这个特定的字符串的位置,然后就可以设置字体颜色了。
代码如下:其中包括添加滚动条的功能
tv=new TextView(parentContext);
String str="1. 选项1\n2. 选项2\n3. 选项3\n4. 选项4\n5. 选项5\n6. 选项6\n7. 选项7\n8. 选项8\n9. 选项9\n10. 选项10\n11. 选项11\n12. 选项12\n13. 选项13\n14. 选项14\n15. 选项15";
LayoutParams lp=new LayoutParams(-1, 200);tv.setVerticalScrollBarEnabled(true);//据说这句话等同于xml中设置:android:scrollbars="vertical",不过实际效果测试滚动条根本不显示
tv.setMovementMethod(ScrollingMovementMethod.getInstance());
SpannableStringBuilder style=new SpannableStringBuilder(str);
Pattern p = Pattern.compile(".*?(\\d+\\. ).*?");//我这里设置的规则就是找到所有 数字.空格 格式的字符
Matcher m = p.matcher(str);
int i=0;
while(m.find()){
String find=m.group(1);
i = str.indexOf(find,i);
System.out.println(str.substring(i,i+find.length()));
style.setSpan(new ForegroundColorSpan(Color.RED),i,i+find.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
tv.setText(style);