捕获Android文本中链接点击事件

TextView显示Html超链接常规用法

  TextView myTextView = (TextView)findViewById(R.id.myTextView);
  String url = "<a href=\"http://baidu.com\">百度</a>";
  myTextView.setText(Html.fromHtml(url));
  // 这个必须设置,否则超链接点解没有效果
  myTextView.setMovementMethod(LinkMovementMethod.getInstance());

拦截超链接的点击事件

上面的操作,点击超链接的时候,系统会封装成Intent:Intent { act=android.intent.action.VIEW dat=http://baidu.com (has extras) }
系统就会去找action为android.intent.action.VIEW,data协议为http的activity,如浏览器。

如果我们想拦截点解事件,跳转到我们指定的页面,或做些其他的逻辑,该怎么做?

  1. 获取html类型的Spanned
  String url = "<a href=\"http://baidu.com\">百度</a>";
  Spanned spannedHtml=Html.fromHtml(url);
  1. 关键实现:
    实现原理就是将所有的URL设置成ClickSpan,然后在它的onClick事件中加入你想要的控制逻辑就可以了。
private void setLinkClickable(final SpannableStringBuilder clickableHtmlBuilder,
      final URLSpan urlSpan) {
    int start = clickableHtmlBuilder.getSpanStart(urlSpan);
    int end = clickableHtmlBuilder.getSpanEnd(urlSpan);
    int flags = clickableHtmlBuilder.getSpanFlags(urlSpan);
    ClickableSpan clickableSpan = new ClickableSpan() {
          public void onClick(View view) {
            //Do something with URL here.
            // 如获取url地址,跳转到自己指定的页面
          }
    };
    clickableHtmlBuilder.setSpan(clickableSpan, start, end, flags);
}

private CharSequence getClickableHtml(Spanned spannedHtml) {
    SpannableStringBuilder clickableHtmlBuilder = new SpannableStringBuilder(spannedHtml);
    URLSpan[] urls = clickableHtmlBuilder.getSpans(0, spannedHtml.length(), URLSpan.class);
    for(final URLSpan span : urls) {
      setLinkClickable(clickableHtmlBuilder, span);
    }
    return clickableHtmlBuilder;
}

3.把设置好clickSpan的html数据,设置到TextView中:

 myTextView.setText(getClickableHtml(url));

 // 设置超链接可点击
 myTextView.setMovementMethod(LinkMovementMethod.getInstance());

4.最后设置TextView的autoLink属性:
如果没有设置autoLink属性,无法拦截超链接的点击事件,亲测。

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world"
    android:id="@+id/myTextView"
    android:autoLink="web" //
/>

注意:
autoLink:一共有以下几种值:web,phone,map,email,all,none。
分别是:url连接,电话号码提取拨号,地图地址,电子邮件,全部解释就是能支持的超级连接全部起作用,none就是默认情况,没有超链接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值