关键字高亮变色

在搜索界面需要关键字与搜索出来的文字高亮显示并且不区分字母大小写:

/**
 * 关键字高亮变色
 *
 * @param color 变化的色值
 * @param text 文字
 * @param keyword 文字中的关键字
 * @return 结果SpannableString
 */
public static SpannableString matcherSearchTitle(int color, String text, String keyword) {
    SpannableString s = new SpannableString(text.toLowerCase());
    SpannableString spannableString = new SpannableString(text);
    keyword=escapeExprSpecialWord(keyword);
    text=escapeExprSpecialWord(text);
    if ((text.toLowerCase()).contains(keyword.toLowerCase())&&!TextUtils.isEmpty(keyword)){
        try {
            Pattern p = Pattern.compile(keyword.toLowerCase());
            Matcher m = p.matcher(s);
            while (m.find()) {
                int start = m.start();
                int end = m.end();
                spannableString.setSpan(new ForegroundColorSpan(color), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
        }catch (Exception e){
        }
    }
    return spannableString;
}

/**
 * 转义正则特殊字符 ($()*+.[]?\^{},|)
 *
 * @param keyword
 * @return keyword
 */
public static String escapeExprSpecialWord(String keyword) {
    if (!TextUtils.isEmpty(keyword)) {
        String[] fbsArr = { "\\", "$", "(", ")", "*", "+", ".", "[", "]", "?", "^", "{", "}", "|" };
        for (String key : fbsArr) {
            if (keyword.contains(key)) {
                keyword = keyword.replace(key, "\\" + key);
            }
        }
    }
    return keyword;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值