最近在项目中做搜索的时候,设计师给了关键字高亮的效果图。直接上干货,实现如下:
public static void setSpecifiedText(TextView textView, String specifiedText) {
String[] keyword = new String[]{specifiedText};
SpannableStringBuilder spannable = new SpannableStringBuilder(textView.getText().toString());
CharacterStyle span;
String wordReg;
for (int i = 0; i < keyword.length; i++) {
String key = "";
// 处理通配符问题
if (keyword[i].contains("*") || keyword[i].contains("(") || keyword[i].contains(")")) {
char[] chars = keyword[i].toCharArray();
for (int k = 0; k < chars.length; k++) {
if (chars[k] == '*' || chars[k] == '(' || chars[k] == ')') {
key = key + "\\" + String.valueOf(chars[k]);
} else {
key = key + String.valueOf(chars[k]);
}
}
keyword[i] = key;
}
wordReg = "(?i)" + keyword[i]; //忽略字母大小写
Pattern pattern = Pattern.compile(wordReg);
Matcher matcher = pattern.matcher(textView.getText().toString());
while (matcher.find()) {
span = new ForegroundColorSpan(Color.parseColor("#e81c1c"));
spannable.setSpan(span, matcher.start(), matcher.end(), Spannable.SPAN_MARK_MARK);
}
}
textView.setText(spannable);
}