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
289 2
|
11月前
|
数据库 Android开发
Android使用EditText+Listview实现搜索效果(使用room模糊查询)
本文介绍如何在Android中使用EditText与ListView实现搜索功能,并结合Room数据库完成模糊查询。主要内容包括:Room的模糊查询语句(使用`||`代替`+`号)、布局美化(如去除ListView分割线和EditText下划线)、EditText回车事件监听,以及查询逻辑代码示例。此外,还提供了相关扩展文章链接,帮助读者深入了解ListView优化、动态搜索及Room基础操作。
681 65
|
11月前
|
Android开发 开发者
Android动态搜索的简单实现
本文介绍了在Android中实现动态搜索功能的方法,重点讲解了通过`SearchView`与`ListView`结合的方式。文章首先简要提及了`addTextChangedListener`的使用场景,随后详细说明了`SearchView`的相关方法,如`setIconified()`、`setOnQueryTextListener()`等,并通过一个示例展示了如何根据用户输入动态过滤`ListView`中的数据。案例中使用了一个字符串数组作为数据源,通过监听输入变化实现搜索功能。最后提供了完整的源码和布局文件,便于开发者参考和实践。
229 3
|
设计模式 Android开发 Kotlin
Android经典实战之Kotlin委托模式和by关键字
本文介绍了Kotlin中`by`关键字在类及属性委托中的运用,通过实例展示了如何利用类委托简化接口实现,以及如何借助标准与自定义属性委托管理属性的读写操作。通过`by`关键字的支持,Kotlin使得委托模式的实现更为直观且高效。
522 4
|
Android开发
Android 中实现模拟搜索的功能详解
Android 中实现模拟搜索的功能详解
228 0
|
SQL 安全 Java
Android经典面试题之Kotlin中object关键字实现的是什么类型的单例模式?原理是什么?怎么实现双重检验锁单例模式?
Kotlin 单例模式概览 在 Kotlin 中,`object` 关键字轻松实现单例,提供线程安全的“饿汉式”单例。例如: 要延迟初始化,可使用 `companion object` 和 `lazy` 委托: 对于参数化的线程安全单例,结合 `@Volatile` 和 `synchronized`
599 6
|
Android开发
Android通讯录开发之通讯录联系人搜索功能最新实现
Android通讯录开发之通讯录联系人搜索功能最新实现
|
Java 测试技术 持续交付
百度搜索:蓝易云【NetMock简介:简化 Java,Android和Kotlin多平台中的HTTP请求测试?】
使用NetMock,您可以在单元测试、集成测试和端到端测试中轻松地模拟和验证HTTP请求和响应,而无需实际发送请求到外部服务。这样可以提高测试的可靠性和可控性,并加快测试执行的速度。无论是在开发过程中还是在持续集成环境中,NetMock都可以帮助您更轻松地进行HTTP请求测试,提高代码质量和稳定性。
187 1
|
Android开发
Android 自定义弹窗 附带搜索过滤功能
前两天要求在项目中添加个小功能,今天正好有时间随手写了一个小demo,过程分享给大家。以后如果有此类需求可直接移植使用。
|
Java 开发工具 Android开发
安卓实战开发之——使用 WIFI 进行设备搜索并获取相应信息
实现使用 WIFI 进行连接设备搜索并获取相应信息的功能案例
540 0

热门文章

最新文章

下一篇
开通oss服务