android 搜索自动匹配关键字并且标红

简介: android 搜索自动匹配关键字并且标红

image.png

这个效果主要是为了着重表现搜索关键字的 。

1. 单关键字匹配

若只需匹配 搜索内容  可以写的简单一些,代码如下:

 if (name != null && name.contains(mKeyWord)) {  
            int index = name.indexOf(mKeyWord);  
            int len = mKeyWord.length();  
            Spanned temp = Html.fromHtml(name.substring(0, index)  
                    + "<font color=#FF0000>"  
                    + name.substring(index, index + len) + "</font>"  
                    + name.substring(index + len, name.length()));  
            holder.tv_name.setText(temp);  
        } else {  
            holder.tv_name.setText(name);  
        }  

上面的name是你要显示整个item内容,  mKeyWord 是搜索的关键字  holder.tv_name 是当前textview控件


2.多关键字匹配


有的时候我们做搜索的时候 是需要将   用户输入的关键字  在服务端做拆分  ,拆分为多个关键字去搜索。那么服务端返回数据的时候 关键字被拆分为多个。也就是返回的是一个 关键字数组。


这种情况我们在客户端做  关键字匹配的时候就要写一个算法,将段落中的多个关键字全部匹配并且标出来。


代码如下:


adapter里面逻辑:

/**
    name   是item显示内容  当前item显示字符串内容
    keyList 是指存放 多个关键字的list集合
  */  
  StringBuffer str = new StringBuffer("");
  str =  Utils.addChild(name, keyList, str);
        holder.contentTv.setText(Html.fromHtml(str.toString()));

匹配方法:

  /**
   * 多关键字查询表红,避免后面的关键字成为特殊的HTML语言代码
   * @param str     检索结果
   * @param inputs  关键字集合
   * @param resStr  表红后的结果
   */
  public static StringBuffer addChild(String str,List<String> inputs,StringBuffer resStr){
    int index=str.length();//用来做为标识,判断关键字的下标
    String next="";//保存str中最先找到的关键字
    for (int i = inputs.size() -1 ; i>= 0;i--) {
      String theNext=inputs.get(i);
      int theIndex=str.indexOf(theNext);
      if(theIndex==-1){//过滤掉无效关键字
        inputs.remove(i);
      }else if(theIndex<index){
        index=theIndex;//替换下标
        next=theNext;
      }
    }
    //如果条件成立,表示串中已经没有可以被替换的关键字,否则递归处理
    if(index==str.length()){
      resStr.append(str);
    }else{
      resStr.append(str.substring(0,index));
      resStr.append("<font color='#FF0000'>"+str.substring(index,index+next.length())+"</font>");
      String str1=str.substring(index+next.length(),str.length());
      addChild(str1,inputs,resStr);//剩余的字符串继续替换
    }
    return resStr;
  }


相关文章
|
生物认证 开发工具 Android开发
安卓设备签到,还是用视觉智能平台人脸搜索1:N
安卓设备签到,还是用视觉智能平台人脸搜索1:N
177 2
|
4月前
|
SQL 安全 Java
Android经典面试题之Kotlin中object关键字实现的是什么类型的单例模式?原理是什么?怎么实现双重检验锁单例模式?
Kotlin 单例模式概览 在 Kotlin 中,`object` 关键字轻松实现单例,提供线程安全的“饿汉式”单例。例如: 要延迟初始化,可使用 `companion object` 和 `lazy` 委托: 对于参数化的线程安全单例,结合 `@Volatile` 和 `synchronized`
56 6
|
6月前
|
Android开发
Android通讯录开发之通讯录联系人搜索功能最新实现
Android通讯录开发之通讯录联系人搜索功能最新实现
|
Android开发
Android 中实现模拟搜索的功能详解
Android 中实现模拟搜索的功能详解
91 0
|
11月前
|
Java 测试技术 持续交付
百度搜索:蓝易云【NetMock简介:简化 Java,Android和Kotlin多平台中的HTTP请求测试?】
使用NetMock,您可以在单元测试、集成测试和端到端测试中轻松地模拟和验证HTTP请求和响应,而无需实际发送请求到外部服务。这样可以提高测试的可靠性和可控性,并加快测试执行的速度。无论是在开发过程中还是在持续集成环境中,NetMock都可以帮助您更轻松地进行HTTP请求测试,提高代码质量和稳定性。
64 1
|
Android开发
Android 自定义弹窗 附带搜索过滤功能
前两天要求在项目中添加个小功能,今天正好有时间随手写了一个小demo,过程分享给大家。以后如果有此类需求可直接移植使用。
|
Java 开发工具 Android开发
安卓实战开发之——使用 WIFI 进行设备搜索并获取相应信息
实现使用 WIFI 进行连接设备搜索并获取相应信息的功能案例
261 0
|
Android开发
【Android源码篇】用grep搜索源码内容关键词
精确搜索A关键词,连同A.B也搜出来了。 用这条命令来搜索grep -rwn “ro.build.date” .,但是同时也显示了ro.build.date.utc属性,怎么在搜索的时候把这个多余的属性排除掉?
285 0
|
XML Java Android开发
Android 监听键盘输入(实现搜索、发送、完成等等)
在Android App的实际开发中,时常会需要监听软键盘的输入事件。 所以个人在此进行一个总结。 例如:微信和QQ聊天的消息发送,你会发现他的聊天框并没有发送的控件,软键盘的换行或者某个按钮会变成发送;在某些浏览器的输入框,输入内容后,软件盘的某个按钮会有搜索的字样,还有填写内容时的完成按钮等等,这些都可以通过监听键盘和输入框的一些配置实现这些功能。
|
设计模式 前端开发 Java
Android体系课之--Kotlin协程进阶篇-协程的异常处理机制以及suspend关键字(三)
协程通过将复杂性放入库来简化异步编程。程序的逻辑可以在协程中顺序地表达,而底层库会为我们解决其异步性。该库可以将用户代码的相关部分包装为回调、订阅相关事件、在不同线程(甚至不同机器!)上调度执行,而代码则保持如同顺序执行一样简单。