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

 更新时间:2016年10月23日 11:41:49   作者:云雾Jo  
这篇文章显示给大家介绍了字符串中关键字变色的实现方法,而后又拓展介绍了在Android中如何实现搜索关键字变色,相信对各位Android开发者们具有一定的参考借鉴价值,感兴趣的朋友们下面来一起看看吧。

一、字符串关键字变色

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

如下图所示:

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

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


将关键字变色

代码如下:

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 text, 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 text, 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), start, end,
     Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 }
 return ss;
}

总结

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

相关文章

  • Android布局之帧布局FrameLayout详解

    Android布局之帧布局FrameLayout详解

    这篇文章主要为大家详细介绍了Android布局之帧布局FrameLayout ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Android实现支付宝6位密码输入界面

    Android实现支付宝6位密码输入界面

    这篇文章主要为大家详细介绍了Android实现支付宝6位密码输入界面的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • Android新浪微博下拉刷新(最新消息显示在最上面)

    Android新浪微博下拉刷新(最新消息显示在最上面)

    查看最新消息要用到类似新浪微博下拉刷新,想必这个功能很多的朋友都会使用吧,下面与大家分享下具体的实现方法,感兴趣的朋友可以参考下哈
    2013-05-05
  • ListView-添加item的事件监听实例

    ListView-添加item的事件监听实例

    下面小编就为大家带来一篇ListView-添加item的事件监听实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Android实现视频播放--腾讯浏览服务(TBS)功能

    Android实现视频播放--腾讯浏览服务(TBS)功能

    TBS视频播放器可以支持市面上几乎所有的视频格式,包括mp4, flv, avi, 3gp, webm, ts, ogv, m3u8, asf, wmv, rm, rmvb, mov, mkv等18种视频格式。这篇文章主要介绍了Android实现视频播放--腾讯浏览服务(TBS),需要的朋友可以参考下
    2018-07-07
  • Flutter学习之实现自定义themes详解

    Flutter学习之实现自定义themes详解

    一般情况下我们在flutter中搭建的app基本上都是用的是MaterialApp这种设计模式,MaterialApp中为我们接下来使用的按钮,菜单等提供了统一的样式,那么这种样式能不能进行修改或者自定义呢?答案是肯定的,一起来看看吧
    2023-03-03
  • PowerManagerService之亮屏流程示例分析

    PowerManagerService之亮屏流程示例分析

    这篇文章主要为大家介绍了PowerManagerService之亮屏流程示例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Android事件分发机制的详解

    Android事件分发机制的详解

    这篇文章主要介绍了Android事件分发机制的详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握Android事件分发机制,需要的朋友可以参考下
    2017-09-09
  • android AsynTask处理返回数据和AsynTask使用get,post请求

    android AsynTask处理返回数据和AsynTask使用get,post请求

    本文主要介绍了android AsynTask处理返回数据和AsynTask使用get,post请求方法。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • Android基于绘制缓冲实现烟花效果

    Android基于绘制缓冲实现烟花效果

    这篇文章主要介绍了Android基于绘制缓冲实现烟花效果,文中通过代码示例和图文结合介绍的非常详细,对大家的学习或工作有一定的帮助,感兴趣的同学可以自己动手尝试一下
    2024-03-03

最新评论