public static CharSequence setColor(Context context, String text, String text1, String text2) { SpannableStringBuilder style = new SpannableStringBuilder(text);// 关键字“孤舟”变色,0-text1.length() style.setSpan(new ForegroundColorSpan(context.getResources().getColor(R.color.colorPrimary)), 0, text1.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);// 关键字“寒江雪”变色,text1.length() + 6-text1.length() + 6 + text2.length() style.setSpan(new ForegroundColorSpan(context.getResources().getColor(R.color.colorAccent)), text1.length() + 6, text1.length() + 6 + text2.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); return style;}二、搜索关键字变色
string.indexOf("xxx");
——这个方法用于查找关键字的位置,返回一个int
值,没找到则返回-1;string.contains("xxx");
——这个方法是为了查看一个字符串中是否包含关键字,会返回一个boolean
值。
将关键字变色
代码如下:
public static CharSequence matcherSearchText(int color, String string, String keyWord) { SpannableStringBuilder builder = new SpannableStringBuilder(string); int indexOf = string.indexOf(keyWord); if (indexOf != -1) { builder.setSpan(new ForegroundColorSpan(color), indexOf, indexOf + keyWord.length(), SPAN_EXCLUSIVE_EXCLUSIVE); } return builder;}3.搜索关键字全部变色
所有关键字变色
代码如下:
public static SpannableString matcherSearchText(int color, String text, String keyword) { SpannableString ss = new SpannableString(text); Pattern pattern = Pattern.compile(keyword); Matcher matcher = pattern.matcher(ss); while (matcher.find()) { int start = matcher.start(); int end = matcher.end(); ss.setSpan(new ForegroundColorSpan(color), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } return ss;}4.搜索关键字全部变色,且不区分大小写
toUpperCase()
和 toLowerCase()
,目的是为了将字符串中的字母统一成大写或者小写。(别的字符不会发生任何改变)
所有关键字变色,且不区分大小写
代码如下:
public static SpannableString matcherSearchTitle(int color, String text, String keyword) { String string = text.toLowerCase(); String key = keyword.toLowerCase(); Pattern pattern = Pattern.compile(key); Matcher matcher = pattern.matcher(string); SpannableString ss = new SpannableString(text); while (matcher.find()) { int start = matcher.start(); int end = matcher.end(); ss.setSpan(new ForegroundColorSpan(color), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } return ss;}总结