标签:Android,关键字,标红
本文实例为大家分享了Android匹配关键字标红的具体代码,供大家参考,具体内容如下
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;
}
0
投稿
猜你喜欢
- 1、添加一个App.config配置文件。2、配置服务http://Lenovo-PC:80/EvisaWS/WharfService?ws
- 泛型是Java中一个非常重要的内容,对于Java进阶学习是必须要掌握的知识点之所以说这个知识点重要,如果你有过阅读过一些开源框架的代码,那你
- 本文实例讲述了Java编程调用微信接口实现图文信息等推送功能。分享给大家供大家参考,具体如下:Java调用微信接口工具类,包含素材上传、获取
- 使用环境项目环境:Idea 2020.2.3、 Maven 3.6.3 、springboot 2.1.4本人在创建springboot项目
- 本文的目的是要实现左右滑动的指引效果。那么什么是指引效果呢?现在的应用为了有更好的用户体验,一般会在应用开始显示一些指引帮助页面,使用户能更
- 游标查询(scroll)简介scroll 查询 可以用来对 Elasticsearch 有效地执行大批量的文档查询,而又不用付出深度分页那种
- 之前自己从来没有做过发送邮箱的功能,前段时间项目需要,在找了很多帖子之后,终于实现了。之后有整理了一下,写了一个类。直接给类传递信息,就可以
- 题外话: 泛型与通配符是Java语法中比较难懂的两个语法,学习泛型和通配符的主要目的是能够看懂源码,实际使用的不多。1.泛型1.1泛型的用法
- Java中可以使用关键字synchronized进行线程同步控制,实现关键资源顺序访问,避免由于多线程并发执行导致的数据不一致性等问题。sy
- 线程池示例在分析线程池之前,先看一个简单的线程池示例。import java.util.concurrent.Executors;impor
- 下载安装openoffice,下载地址:http://www.openoffice.org/download/我安装的目录:输入cmd回车在
- Spring多配置文件有什么好处? 按照目的、功能去拆分配置文件,可以提高配置文件的可读性与维护性,如将配置事务管理、数据源等少改动的配置与
- 要求:用DateTimeFormatter实现: 用扫描器获取输入的时间(年月日时分),这个时间的格式是常用的格式,然后格式化这个时间,把格
- 一、前言spring cloud大行其道的当下,如果不了解基本原理那么是很纠结的(看见的都是 约定大于配置 ,但是原理呢?为什么要这么做?)
- 介绍本文介绍在Java程序中如何添加图片到excel表格,添加图片时可设置图片大小、位置、旋转、超链接、可选文本等,以及如何读取、删除exc
- 在Linux中创建一个新进程的唯一方法是使用fork()函数。fork()函数是Linux中一个非常重要的函数,和以往遇到的函数有一些区别,
- 本文实例讲述了Java创建和启动线程的两种方式。分享给大家供大家参考,具体如下:方式1:继承Thread类步骤:1):定义一个类A继承于ja
- PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4
- 写在前面元旦三天在家闲着无事,就看了看Linq的相关内容,也准备系统的学习一下,作为学习Linq的前奏,还是先得说说Lambda与匿名方法的
- 一、准备工作和传统 CRUD 一样,实现对员工信息的增删改查。①搭建环境添加相关依赖web.xmlspringmvc.xml②准备实体类pu