关闭

TextView 中拦截点击事件

53人阅读 评论(0) 收藏 举报

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1157次
    • 积分:122
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:3篇
    • 译文:2篇
    • 评论:0条