Android 多个不同文字高亮并添加点击事件

private CharSequence setTextView(String desc,String target, TextView tv) {

        /*正则表达式  取出 两个#之间的内容 (不包含#) */
        Pattern p = Pattern.compile("#([^\\#|]+)#");
        /*android 提供的 具有强大的CharSequence 处理能力 各种区域处理*/
        SpannableString ss = new SpannableString(desc);
        Matcher m = p.matcher(target);
        /*由于@昵称、#话题#、http://等这些关键字是可以点击的,所以我们需要对TextView做一些处理,需要去设置它的MovementMethod*/
        if (m.find()) {
            // 要实现文字的点击效果,这里需要做特殊处理
            tv.setMovementMethod(LinkMovementMethod.getInstance());
            // 重置正则位置
            m.reset();
        }
        /*循环找出每个复合正则的字符串,逐个处理*/
        while (m.find()) {
            /*取出 字符串 前后添加#*/
//            final String s = "#" + m.group(1) + "#";
            final String s = m.group(1);
//            int startIndex = m.start(1) -1;
//            int startIndex = m.start(1);
            int startIndex = desc.indexOf(s);
            int endIndex = startIndex + s.length();
            /*区域处理*/
            ss.setSpan(new ForegroundColorSpan(Color.BLUE),startIndex,endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            ss.setSpan(new ClickableSpan() {
                @Override
                public void onClick(View widget) {
                    //去掉两边的#号,获取点击的话题内容
                    showToastMsg("1");
//                    String content=s.substring(1,s.length()-1);
//                    String topicId="";//话题的id
//                    for (int i=0;i<commList.getTopic().size();i++){
//                        if (content.equals(commList.getTopic().get(i).getTitle())){
//                            topicId=commList.getTopic().get(i).getId();
//                        }
//                    }
//                    if (topicId.equals(itemId)){
//                        return;
//                    }
//                    CommTopicActivity.startCommTopicActivity(mContext,topicId);
//                    MobclickAgent.onEvent(mContext,"pla_Feed_topic",commList.getId()+"_"+topicId);
                }
                @Override
                public void updateDrawState(TextPaint ds) {
                    //        super.updateDrawState(ds);
                    //    按自己需求    重写 父类方法.
                    //        字体变色
                    ds.setColor(Color.parseColor("#507daf"));
                    //            设置下划线
                    ds.setUnderlineText(false);
                }
            }, startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        }

        return ss;
    }

调用方式

tv_user_xieyi.setText(setTextView("登录即表示同意《用户协议》和《隐私政策》","登录即表示同意#《用户协议》#和#《隐私政策》#", tv_user_xieyi));
        tv_user_xieyi.setHighlightColor(getResources().getColor(R.color.white));//取消背景色

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值