登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

查看: 68|回复: 3

Android实现TextView字符串关键字变色的方法,android 圆形textview

[复制链接]

331

主题

331

帖子

1699

安币

手工艺人

发表于 2017-12-26 15:37:03 | 显示全部楼层 |阅读模式

        一、字符串关键字变色

        在界面显示的时候,偶尔需要将某些字符串中特定的字符串重点标出

        如下图所示:

        

        便有了下面的方法。这个方法针对于比较 固定的字符串 ,并且需要自己 计算 需要变色的文字 位置 ,代码如下:

[Java] 查看源文件 复制代码
public static charsequence setcolor(context context, string text, string text1, string text2) {
 spannablestringbuilder style = new spannablestringbuilder(text);
// 关键字“孤舟”变色,0-text1.length()
 style.setspan(new foregroundcolorspan(context.getresources().getcolor(r.color.colorprimary)), 0, text1.length(),spannable.span_exclusive_exclusive);
// 关键字“寒江雪”变色,text1.length() + 6-text1.length() + 6 + text2.length()
 style.setspan(new foregroundcolorspan(context.getresources().getcolor(r.color.coloraccent)), text1.length() + 6, text1.length() + 6 + text2.length(), spanned.span_exclusive_exclusive);
 return style;
}

        二、搜索关键字变色

        要使搜索关键字变色,只需要对比关键字是否和字符串之间的某些字相同,然后将相同的字改变颜色就行了。

        首先说一下 如何判断一个字符串包含另一个字符串 ,有两种方法:

        1. string.indexof("xxx"); ――这个方法用于查找关键字的位置,返回一个int值,没找到则返回-1;

        2. string.contains("xxx"); ――这个方法是为了查看一个字符串中是否包含关键字,会返回一个boolean值。

        下面这个方法用到的就是 indexof() 。

        


将关键字变色

        代码如下:

[Java] 查看源文件 复制代码
public static charsequence matchersearchtext(int color, string string, string keyword) {
 spannablestringbuilder builder = new spannablestringbuilder(string);
 int indexof = string.indexof(keyword);
 if (indexof != -1) {
 builder.setspan(new foregroundcolorspan(color), indexof, indexof + keyword.length(), span_exclusive_exclusive);
 }
 return builder;
}

        3.搜索关键字全部变色

        上述方法很简单对不对?但是有一个很明显的问题,也在上图中标注出来了,就是不能使所有的关键字都变色,只能第一个变色。

        下面这个方法就是要是所有的关键字都变色,就需要另外的方法了。

        


所有关键字变色

        代码如下:

[Java] 查看源文件 复制代码
public static spannablestring matchersearchtext(int color, string text, string keyword) {
 spannablestring ss = new spannablestring(text);

        4.搜索关键字全部变色,且不区分大小写

        上述方法依旧很简单对不对?那么问题又来了,上述方法虽然是把所有相同的字都标出来了,但如果是字母,肯定会遇到大小写的问题,而搜索不需要区分大小写。

        首先也介绍两个string的方法: touppercase() 和 tolowercase() ,目的是为了将字符串中的字母统一成大写或者小写。(别的字符不会发生任何改变)

        要达到目的就很简单了,只需要在比较的时候,先将字母大小写统一,就能得到想要的效果。比如搜'a',所有'a'和'a'都会变色了。

        注1:只是在判断的时候统一大小写,在最终显示的时候还是要显示服务器给的字符串。

        注2:用这个方法就不用正则啦,简单方便。(不想用正则,在网上找了好久都没有比较明确的答案,悲剧。)

        


所有关键字变色,且不区分大小写

        代码如下:

[Java] 查看源文件 复制代码
public static spannablestring matchersearchtitle(int color, string text, string keyword) {
 string string = text.tolowercase();
 string key = keyword.tolowercase();

        总结


2

主题

8878

帖子

-2186

安币

限制会员

QQ达人

发表于 2017-12-27 10:36:55 | 显示全部楼层
楼主威武,以后多发干货,多办活动~!

6

主题

8834

帖子

-2510

安币

限制会员

发表于 2017-12-28 08:10:54 | 显示全部楼层
楼主是好人,回个帖会有安币吗?

8

主题

8612

帖子

-2558

安币

限制会员

发表于 2017-12-29 18:53:53 | 显示全部楼层
每次我都积极回帖的,想要安币~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条
联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表