EditText搜索关键字,返回结果匹配关键字改变颜色
来源:互联网 发布:电子软件有哪些 编辑:程序博客网 时间:2024/05/17 05:14
自己项目 用到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; }}
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
0 0
- EditText搜索关键字,返回结果匹配关键字改变颜色
- Android 搜索到的关键字改变颜色
- Android 搜索到的关键字改变颜色
- Android 搜索到的关键字改变颜色
- Android 搜索到的关键字改变颜色
- JavaScript搜索关键字返回结果关键字加红
- Android 搜索结果匹配关键字且高亮显示
- 搜索关键字变颜色
- android 搜索自动匹配关键字并设置器颜色
- 搜索的关键字变颜色
- 给搜索关键字加颜色
- iOS开发中,搜索结果与搜索关键字匹配的位置变色
- 搜索历史 AutoCompleteTextView自定义匹配关键字匹配
- 改变文本中关键字的颜色
- WebCollector 爬百度 搜索关键字排名 为何过几天返回结果全部是0? 10C
- 多关键字搜索结果中关键字加红突出显示
- 新浪微博关键字搜索结果抓取
- 截取关键字高亮作为搜索结果
- [vue.js]vuex实现一个简易计数器
- Sequelize 和 MySQL 对照
- php+ajax实现分页
- RX操作符之Observable的创建方式一(just、from、repeat、repeatWhen)
- 制作Mac系统安装U盘 及安装流行 (OS X EI Capitan 10.11.5)
- EditText搜索关键字,返回结果匹配关键字改变颜色
- C的转义字符,格式控制符,常量变量
- linux兴趣小组暑假第二次讲座总结
- poj1511Invitation Cards
- intellj idea 初体验
- 数字签名与数字证书
- php+ajax+jquery实现分页
- JSON和XML解析的理解
- linux中如何查看日志中某个异常出现的次数