热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

安卓中在TextView中每行的特定位置修改字体颜色以及添加滚动条(纯代码实现)

首先放一张效果图:安卓中有如下的方法来修改特定位置的字体颜色,但是缺陷是只能设置指定范围的,比如从第二个开始,到第3个结束,而不能设置指定规则的。intstart2;intend3;tvne
首先放一张效果图:


安卓中有如下的方法来修改特定位置的字体颜色,但是缺陷是只能设置指定范围的,比如从第二个开始,到第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 .*?(\\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);







推荐阅读
author-avatar
mobiledu2502912375
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有