TextView 中拦截点击事件

TextView 中的链接点击后,会自动跳转到浏览器显示。如果需要自己拦截这个事件,可以通过下面的方法实现:


  CharSequence charSequence = Html.fromHtml(text);/text是要显示的html文字
        final SpannableStringBuilder builder = new SpannableStringBuilder(charSequence);///这个builder本身就实现了spannle
        URLSpan[] urlSpans = builder.getSpans(0, charSequence.length(), URLSpan.class);
        for(URLSpan span : urlSpans){
            final int start = builder.getSpanStart(span);
            final int end = builder.getSpanEnd(span);
            int flag = builder.getSpanFlags(span);
            final String link = span.getURL();
            L.i("tostring:"+span.toString());
            builder.setSpan(new ClickableSpan() {

                @Override
                public void onClick(View widget) {
                    //捕获<a>标签点击事件,及对应超链接link
                    L.i("link--title" + link+builder.subSequence(start,end));
			//dosomething  link 就是链接地址 ;builder.subSequence(start,end).toString());可以获得显示显示的文字
                    Intent intent = new Intent(CommQuesActivity.this,WebActivity.class);
                    intent.putExtra("url",link);
                    intent.putExtra("title",builder.subSequence(start,end).toString());
                    startActivity(intent);
                }

                @Override
                public void updateDrawState(TextPaint ds) {
                    ds.setColor(ds.linkColor); //设置链接的文本颜色
                    ds.setUnderlineText(false); //去掉下划线
                }


            }, start, end, flag);
            builder.removeSpan(span);
        }

        textView.setLinksClickable(true);
        textView.setMovementMethod(LinkMovementMethod.getInstance());
        textView.setText(builder);


SpannableStringBuilder  implements CharSequence, GetChars, Spannable, Editable,
        Appendable, GraphicsOperations,所以最后直接将builder 显示到textview中即可。

思路就是将URLSpan 替换为自己实现的ClickableSpan,URLSpan本身就是 extends ClickableSpan。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值