自己项目 用到EditText搜索结果关键字改变颜色,就研究了一下,2种方法实现,发现一个好用的工具类,在代码中一行调用这个方法,直接实现需求。

KeywordUtil.java工具类。

package com.example.administrator.replacekeyword.utils;

import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* 项目名称:
* 类描述:
* 创建人:
* 创建时间:2016/7/26 15:22
* 修改人:Administrator
* 修改时间:2016/7/26 15:22
* 修改备注:
*/

public class KeywordUtil {

/**
* 关键字高亮变色
*
* @param color
* 变化的色值
* @param text
* 文字
* @param keyword
* 文字中的关键字
* @return
*/
public static SpannableString matcherSearchTitle(int color, String text,
String keyword) {
SpannableString s = new SpannableString(text);
Pattern p = Pattern.compile(keyword);
Matcher m = p.matcher(s);
while (m.find()) {
int start = m.start();
int end = m.end();
s.setSpan(new ForegroundColorSpan(color), start, end,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return s;
}

/**
* 多个关键字高亮变色
*
* @param color
* 变化的色值
* @param text
* 文字
* @param keyword
* 文字中的关键字数组
* @return
*/
public static SpannableString matcherSearchTitle(int color, String text,
String[] keyword) {
SpannableString s = new SpannableString(text);
for (int i = 0; i < keyword.length; i++) {
Pattern p = Pattern.compile(keyword[i]);
Matcher m = p.matcher(s);
while (m.find()) {
int start = m.start();
int end = m.end();
s.setSpan(new ForegroundColorSpan(color), start, end,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
return s;
}
}

2.第二个工具类KeywordUtil.java

package com.example.administrator.replacekeyword.utils;

import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* 项目名称:
* 类描述:
* 创建人:
* 创建时间:2016/7/26 15:22
* 修改人:Administrator
* 修改时间:2016/7/26 15:22
* 修改备注:
*/

public class KeywordUtil {

/**
* 关键字高亮变色
*
* @param color
* 变化的色值
* @param text
* 文字
* @param keyword
* 文字中的关键字
* @return
*/
public static SpannableString matcherSearchTitle(int color, String text,
String keyword) {
SpannableString s = new SpannableString(text);
Pattern p = Pattern.compile(keyword);
Matcher m = p.matcher(s);
while (m.find()) {
int start = m.start();
int end = m.end();
s.setSpan(new ForegroundColorSpan(color), start, end,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return s;
}

/**
* 多个关键字高亮变色
*
* @param color
* 变化的色值
* @param text
* 文字
* @param keyword
* 文字中的关键字数组
* @return
*/
public static SpannableString matcherSearchTitle(int color, String text,
String[] keyword) {
SpannableString s = new SpannableString(text);
for (int i = 0; i < keyword.length; i++) {
Pattern p = Pattern.compile(keyword[i]);
Matcher m = p.matcher(s);
while (m.find()) {
int start = m.start();
int end = m.end();
s.setSpan(new ForegroundColorSpan(color), start, end,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
return s;
}
}

3.Main.java
package com.example.administrator.replacekeyword.activity;

import android.graphics.Color;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;

import com.example.administrator.replacekeyword.R;
import com.example.administrator.replacekeyword.utils.KeywordUtil;
import com.example.administrator.replacekeyword.utils.MyTextView;
import com.google.android.gms.appindexing.Action;
import com.google.android.gms.appindexing.AppIndex;
import com.google.android.gms.common.api.GoogleApiClient;

public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
private EditText mEditText;
private MyTextView mTV;
private TextView mTv2;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
initViews();

}

private void initViews() {
mEditText = (EditText) findViewById(R.id.et_search2);
mTV = (MyTextView) findViewById(R.id.tv_search2);
mTv2 = (TextView) findViewById(R.id.tv_search3);
initEvents();
}

private void initEvents() {

//根据输入框输入值的改变来过滤搜索
mEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//当输入框里面的值为空,更新为原来的列表,否则为过滤数据列表
String result = mTV.getText().toString().trim();
String editTextStr = mEditText.getText().toString().trim();
mTV.setSpecifiedTextsColor(result, editTextStr, Color.parseColor("#FF0000"));
}

@Override
public void afterTextChanged(Editable s) {
String result = mTv2.getText().toString().trim();
String editTextStr = mEditText.getText().toString().trim();
mTv2.setText(KeywordUtil.matcherSearchTitle(Color.BLUE,result,editTextStr));
}
});
}

}

4.activity_main2.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F0F0F0"
android:orientation="vertical">

<EditText
android:id="@+id/et_search2"
android:layout_width="match_parent"
android:layout_height="80dp"
android:hint="请输入下面一句话中的几个字"
/>
<com.example.administrator.replacekeyword.utils.MyTextView
android:id="@+id/tv_search2"
android:layout_width="match_parent"
android:layout_height="100dp"
android:gravity="center_vertical"
android:text="输入关键字,显示不同"/>

<TextView
android:id="@+id/tv_search3"
android:layout_width="match_parent"
android:layout_height="100dp"
android:gravity="center_vertical"
android:text="输入关键字,显示不同2"/>
</LinearLayout>

源码下载地址:http://download.csdn.net/detail/renhaijuniryfe/9586720
---------------------
作者:yayayaiii
来源:CSDN
原文:https://blog.csdn.net/renhaijuniryfe/article/details/52038215

EditText搜索关键字,返回结果匹配关键字改变颜色的更多相关文章

  1. iOS Regex匹配关键字并修改颜色

    引入第三方框架RegexKitLite /** * 根据传入的文字返回一个符合规则的富文本 * * @param title 匹配的文字 * * @return 创建的富文本 */ -(NSAttri ...

  2. 搜索sqlserver 存储过程中的关键字

    搜索sqlserver 存储过程中的关键字 select * from sys.all_sql_modules where definition like '%SP_NAME%'

  3. Springboot+Vue实现仿百度搜索自动提示框匹配查询功能

    案例功能效果图 前端初始页面 输入搜索信息页面 点击查询结果页面 环境介绍 前端:vue 后端:springboot jdk:1.8及以上 数据库:mysql 核心代码介绍 TypeCtrler .j ...

  4. SQL JOIN\SQL INNER JOIN 关键字\SQL LEFT JOIN 关键字\SQL RIGHT JOIN 关键字\SQL FULL JOIN 关键字

    SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据. Join 和 Key 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join. 数据库中的表 ...

  5. Android 根据EditText搜索框ListView动态显示数据

    根据EditText搜索框ListView动态显示数据是根据需求来的,觉得这之中涉及的东西可能比较的有意思,所以动手来写一写,希望对大家有点帮助. 首先,我们来分析下整个过程: 1.建立一个layou ...

  6. C51中的关键字和ANSIC标准关键字

    C51中的关键字和ANSIC标准关键字 作       者:武力戡乱 修改日期:2017-09-05 备       注: 1.总备注信息 2.联系方式 3.其它博文链接:武力戡乱博客目录总表 内   ...

  7. ElasticSearch 2 (17) - 深入搜索系列之部分匹配

    ElasticSearch 2 (17) - 深入搜索系列之部分匹配 摘要 到目前为止,我们介绍的所有查询都是基于完整术语的,为了匹配,最小的单元为单个术语,我们只能查找反向索引中存在的术语. 但是, ...

  8. Android 依据EditText搜索框ListView动态显示数据

    依据EditText搜索框ListView动态显示数据是依据需求来的,认为这之中涉及的东西可能比較的有意思,所以动手来写一写.希望对大家有点帮助. 首先.我们来分析下整个过程: 1.建立一个layou ...

  9. grep 同时满足多个关键字和满足任意关键字

    grep 同时满足多个关键字和满足任意关键字 ① grep -E "word1|word2|word3"   file.txt    满足任意条件(word1.word2和word ...

随机推荐

  1. 解决SpannableString在Android组件间传递时显示失效的问题

    问题:在A activity中传递一个SpannableString到B activity中,并最终传递到B activity中的TextView中,但是没有展示出Span效果. 解决:阅读TextV ...

  2. javaScript设计模式之----工厂模式

    什么是工厂模式?我们通过一个例子了解一下: 比如我们想要弹出几个字符串 function funA(){ alert('a'); } function funB(){ alert('b'); } fu ...

  3. Python爬虫使用lxml模块爬取豆瓣读书排行榜并分析

    上次使用了BeautifulSoup库爬取电影排行榜,爬取相对来说有点麻烦,爬取的速度也较慢.本次使用的lxml库,我个人是最喜欢的,爬取的语法很简单,爬取速度也快. 本次爬取的豆瓣书籍排行榜的首页地 ...

  4. 面试前必须要知道的Redis面试题

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 回顾前面: 从零单排学Redis[青铜] 从零单排学 ...

  5. 安全研究 | Jenkins 任意文件读取漏洞分析

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云鼎实验室 发表于云+社区专栏 一.漏洞背景 漏洞编号:CVE-2018-1999002 漏洞等级:高危 Jenkins 7 月 18 ...

  6. 委托与lambda关系

    什么是委托委托是没有方法体的,声明委托就是一个关键字: delegate ,委托可以试有参无参,有返回值无返回值.和我们的方法是一样的.不同的区别是 委托没有方法体的,委托可放在类下也可以放在类的外面 ...

  7. 用系统为centos6的主机,搭建PXE服务器,实现批量安装centos6,7系统

    1. iptables -F setenforce 0 临时关掉selinux,清掉防火墙 永久生效更改配置文件:vim /etc/sysconfig/selinux chkconfig iptabl ...

  8. Changes of user relationship in AD can't be correctly synchronized to SCSM

    The relationship of users might be not correctly updated if related users were once re-named in AD o ...

  9. SuperMap iObject入门开发系列之三管线系统标注

    本文是一位好友“托马斯”授权给我来发表的,介绍都是他的研究成果,在此,非常感谢. 管线系统会涉及到一些坐标标注,属性标注,提供给用户查询获取其需要的信息,这期的文章介绍的是基于超图iObject开发的 ...

  10. Andorid之页面布局优化

    文章大纲 一.为什么要进行页面布局优化二.页面布局优化实操三.项目源码下载四.参考文章 一.为什么要进行页面布局优化   在开发Android时,会遇到某些是通用的布局,我们常将一些通用的视图提取到一 ...