> 文章列表 > Android搜索关键字高亮显示

Android搜索关键字高亮显示

Android搜索关键字高亮显示

方法一:关键字数组格式

public class TextHighLight {/*   关键字高亮显示*   @param text 文字*   @param keyword1 文字中的关键字数组        *   @return*  */public static SpannableStringBuilder matcherSearchContent(String text, String[] keyword1) {String[] keyword = new String[keyword1.length];System.arraycopy(keyword1, 0, keyword, 0, keyword1.length);SpannableStringBuilder spannable = new SpannableStringBuilder(text);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(text);while (matcher.find()) {span = new ForegroundColorSpan(Color.parseColor("#ff5656"));spannable.setSpan(span, matcher.start(), matcher.end(), Spannable.SPAN_MARK_MARK);}}return spannable;}
}

方法二:关键字格式为String

public class TextHighLight {/*   关键字高亮显示*   *   @param text 文字  *   @param testKey 关键字*   @param colorString 高亮颜色:格式为“#ff5656”*   @return 包含高亮的字符*  */public static SpannableStringBuilder matcheText(String text, String testKey, String colorString) {//textkey转listList<String> list = new ArrayList();for(int i = 0; i < testKey.length; i++){list.add(testKey.substring(i, i + 1));}//list转String[]String[] keyword1 = new String[list.size()];list.toArray(keyword1);String[] keyword = new String[keyword1.length];//复制数组System.arraycopy(keyword1, 0, keyword, 0, keyword1.length);SpannableStringBuilder spannable = new SpannableStringBuilder(text);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(text);while (matcher.find()) {span = new ForegroundColorSpan(Color.parseColor(colorString));spannable.setSpan(span, matcher.start(), matcher.end(), Spannable.SPAN_MARK_MARK);}}return spannable;}
}