Android实现TextView字符串关键字变色的方法

Android实现TextView字符串关键字变色的方法,第1张

概述一、字符串关键字变色在界面显示的时候,偶尔需要将某些字符串中特定的字符串重点标出

一、字符串关键字变色

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

如下图所示:

@H_404_14@

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

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)),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() 。


将关键字变色

代码如下:

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.搜索关键字全部变色

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

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


所有关键字变色

代码如下:

public static SpannableString matcherSearchText(int color,String keyword) { SpannableString ss = new SpannableString(text);​ Pattern pattern = Pattern.compile(keyword); Matcher matcher = pattern.matcher(ss);​ while (matcher.find()) { int start = matcher.start(); int end = matcher.end(); ss.setSpan(new ForegroundcolorSpan(color),start,end,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); }​ return ss;}

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

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

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

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

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

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


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

代码如下:

public static SpannableString matcherSearchTitle(int color,String keyword) { String string = text.tolowerCase(); String key = keyword.tolowerCase();​ Pattern pattern = Pattern.compile(key); Matcher matcher = pattern.matcher(string);​ SpannableString ss = new SpannableString(text); while (matcher.find()) { int start = matcher.start(); int end = matcher.end(); ss.setSpan(new ForegroundcolorSpan(color),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } return ss;}

总结

以上就是我所总结的AndroID实现TextVIEw字符串关键字变色的一些方法了,希望本文的内容对各位AndroID开发者们能有所帮助,如果有疑问大家可以留言交流。

总结

以上是内存溢出为你收集整理的Android实现TextView字符串关键字变色的方法全部内容,希望文章能够帮你解决Android实现TextView字符串关键字变色的方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1147934.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存