自己项目 用到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"?>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"> android:id="@+id/et_search2" android:layout_width="match_parent" android:layout_height="80dp" android:hint="请输入下面一句话中的几个字" /> android:id="@+id/tv_search2" android:layout_width="match_parent" android:layout_height="100dp" android:gravity="center_vertical" android:text="输入关键字,显示不同"/> android:id="@+id/tv_search3" android:layout_width="match_parent" android:layout_height="100dp" android:gravity="center_vertical" android:text="输入关键字,显示不同2"/>
源码下载地址:http://download.csdn.net/detail/renhaijuniryfe/9586720