TextView 中拦截点击事件

原创 2016年08月28日 19:31:00

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。

解决textview.setMovementMethod后Listview的OnItemClickListener点击失效问题

listview中在item里的textview设置了setMovementMethod(LinkMovementMethod.getInstance());后, list的clickitem失效问...
  • u012390044
  • u012390044
  • 2015年04月21日 18:43
  • 1504

ListView的Item里的TextView设置ClickableSpan和LinkMovementMethod导致ListView无法响应点击事件

ListView的Item里的TextView设置ClickableSpan和LinkMovementMethod导致ListView无法响应点击事件说说我的案例:类似朋友圈,一个列表,是用户发表动态...
  • laxian2009
  • laxian2009
  • 2016年06月10日 18:13
  • 2085

TextView 使用setMovementMethod滑动

在布局文件中 设置 TextView属性 android:scrollbars="vertical"在代码中textview.setMovementMethod(ScrollingMovementMe...
  • qq_23077365
  • qq_23077365
  • 2016年08月14日 08:40
  • 879

TextView 中拦截点击事件

TextView 中的链接点击后,会自动跳转到浏览器显示。如果需要自己拦截这个事件,可以通过下面的方法实现: CharSequence charSequence = Html.fromH...
  • wq3090202314
  • wq3090202314
  • 2016年08月28日 19:31
  • 247

Android事件分发,事件拦截,事件处理总结

对于安卓的事件分发,拦截及事件处理无论是面试还是在日常应用中都涉及的比较多,网上的帖子也很多,感觉都没说透,或者没直接点出来,我认为郭神这篇博客写的事件分发理解的挺好 http://blog.csdn...
  • shenshibaoma
  • shenshibaoma
  • 2016年10月11日 10:46
  • 1416

android 为TextView的部分文字设置超链接样式并监听点击事件

android 为TextView的部分文字设置超链接样式并监听点击事件
  • centralperk
  • centralperk
  • 2015年09月11日 11:24
  • 7472

自定义的tableViewCell中添加的textField拦截了tableView的行点击事件

解决思路: 1、首先看tableView的点击事件是否允许      self.tableView.allowsSelection = YES; 2、再设置textField不可用    ...
  • u010217380
  • u010217380
  • 2015年12月12日 14:54
  • 1498

Android 事件拦截

实验环境 OS X 10.9Eclipse(ADT)Android源码版本:API Level 19(Android 4.4) Android事件构成 在Android中,事件主要包括点按、...
  • hulongkao
  • hulongkao
  • 2014年09月18日 11:04
  • 843

Android事件拦截与处理

前段时间刚接触过android手机开发,对它的事件传播机制不是很了解,虽然网上也查了相关的资料,但是总觉得理解模模糊糊,似是而非,于是自己就写个小demo测试了一下。总算搞明白了它的具体机制。写下自己...
  • fangchao3652
  • fangchao3652
  • 2015年01月27日 09:50
  • 608

TextView处理Html文本超链接事件

TextView是Android中用于显示文本的一个普通控件,textview.setText(“文本”); 同时它也支持Html文本的显示,textview.setText()textview.s...
  • jjj11223344
  • jjj11223344
  • 2017年04月18日 16:38
  • 474
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TextView 中拦截点击事件
举报原因:
原因补充:

(最多只允许输入30个字)