一、精确匹配(区分大小写、关键字多次出现只有首次变色):
使用:
stringInterceptionChangeRed(mTextView, "需要变色文字", "全部文字");
方法实体:
/**
* CSDN-深海呐
* TextView部分文字变色
* keyword = 关键字、需要变色的文字 string = 包含变色文字的全部文字
*/
public static void stringInterceptionChangeRed(TextView textView, String keyword, String string) {
if (keyword == null || keyword.trim().length() == 0) return;
if (!string.contains(keyword)) return;
int start = string.indexOf(keyword);
int end = start + keyword.length();
if (end!=0&&start!=-1){
final SpannableStringBuilder style = new SpannableStringBuilder();
style.append(string);
//设置部分文字颜色
ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.parseColor("#0000FF"));
style.setSpan(foregroundColorSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(style);
}
}
如果需要变色的文字,具有单独点击事件,请看这个博客:Android TextView部分文字(超链接/Span)点击事件、变色、去除下划线_赵星海的博客-CSDN博客https://blog.csdn.net/qq_39731011/article/details/100163416
二、模糊匹配(不区分大小写、关键字多次出现多次变色):
使用:
mTextView.setText(matcherSearchTitle(string,keyString));
方法实体:
/**
* CSDN-深海呐
* TextView部分文字变色-不区分大小写模糊匹配,多次高亮
* keyword = 关键字、需要变色的文字 text = 包含变色文字的全部文字
*/
public static SpannableString matcherSearchTitle( 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.parseColor("#77bbff")), start, end,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return ss;
}