Android匹配字符串高亮并设置点击事件

2020-05-06  本文已影响0人  Zachary46
public class TextRichUtil {
    public interface RichClickLisentner {
        void onClick();
    }

    /**
     * 获取高亮字符串
     * @param content  内容
     * @param target   高亮的部分
     * @param color    高亮的颜色
     */
    public static SpannableStringBuilder getRichText(String content, String target, int color){
        SpannableStringBuilder stringBuilder = new SpannableStringBuilder(content);
        Matcher matcher = Pattern.compile(target).matcher(content);
        while (matcher.find()){
            int start = matcher.start();
            int end = matcher.end();
            stringBuilder.setSpan(new ForegroundColorSpan(color), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        return stringBuilder;
    }

    /**
     * 设置高亮字符串
     * @param textView 控件
     * @param content  内容
     * @param target   高亮的部分
     * @param color    高亮的颜色
     * @param lisenter 高亮部分点击事件
     */
    public static void setRichText(TextView textView, String content, String target, int color, RichClickLisentner lisenter){
        SpannableStringBuilder stringBuilder = new SpannableStringBuilder(content);
        Matcher matcher = Pattern.compile(target).matcher(content);
        while (matcher.find()){
            int start = matcher.start();
            int end = matcher.end();
            stringBuilder.setSpan(new ClickableSpan() {
                @Override
                public void onClick(@NonNull View view) {
                    lisenter.onClick();
                }

                @Override
                public void updateDrawState(@NonNull TextPaint ds) {
                    super.updateDrawState(ds);
                    ds.setUnderlineText(false);
                    ds.setColor(color);
                }
            }, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        textView.setText(stringBuilder);
        textView.setMovementMethod(LinkMovementMethod.getInstance());
    }
}
上一篇下一篇

猜你喜欢

热点阅读