专栏首页技术小黑屋捕获Android文本中链接点击事件

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

Android中的TTextView很强大,我们可以不仅可以设置纯文本为其内容,还可以设置包含网址和电子邮件地址的内容,并且使得这些点击可以点击。但是我们可以捕获并控制这些链接的点击事件么,当然是可以的。

本文将一个超级简单的例子介绍一下如何实现在Android TextView 捕获链接的点击事件。

关键实现

实现原理就是将所有的URL设置成ClickSpan,然后在它的onClick事件中加入你想要的控制逻辑就可以了。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

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. } }; clickableHtmlBuilder.setSpan(clickableSpan, start, end, flags); } private CharSequence getClickableHtml(String html) { Spanned spannedHtml = Html.fromHtml(html); SpannableStringBuilder clickableHtmlBuilder = new SpannableStringBuilder(spannedHtml); URLSpan[] urls = clickableHtmlBuilder.getSpans(0, spannedHtml.length(), URLSpan.class); for(final URLSpan span : urls) { setLinkClickable(clickableHtmlBuilder, span); } return clickableHtmlBuilder; }

如何使用

1 2 3 4 5 6

TextView myTextView = (TextView)findViewById(R.id.myTextView); String url = "This is a page with lots of URLs. <a href=\"http://droidyue.com\">droidyue.com</> " + "This left is a very good blog. There are so many great blogs there. You can find what" + "you want in that blog." + "The Next Link is <a href=\"http://www.google.com.hk\">Google HK</a>"; myTextView.setText(getClickableHtml(url));

实现自己的控制

我们需要在ClickSpan的onClick方法中加入自己的控制逻辑,比如我们使用傲游浏览器打开点击的链接。

1 2 3 4 5 6 7

public void onClick(View view) { Log.i(LOGTAG, "onClick url=" + urlSpan.getURL() ); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(urlSpan.getURL())); intent.setPackage("com.mx.browser"); startActivity(intent); }

提醒

不要忘了设置TextView的autoLink属性。

1 2 3 4 5 6 7

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

demo源码

百度云盘

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kotlin中常量的探究

    在我们尝试使用Kotlin作为开发语言的时候,应该会想到在Kotlin中如何定义一个常量,就像Java中这样的代码一样

    技术小黑屋
  • 如何看待 Kotlin 成为 Android 官方支持开发语言?

    Google IO 2017宣布了 Kotlin 会成为 Android 官方开发语言。一时间朋友圈和Android圈被各种刷屏。当然我也顺势而为发布了一篇的文...

    技术小黑屋
  • 为什么我要改用Kotlin

    写在前面的话,作为一个不熬夜的人,一觉醒来发现Kotlin成为了Android的官方语言,可谓是大喜过望。为了趁热打铁,我决定提前三天放出原定本周日Releas...

    技术小黑屋
  • [android] fragment的动态创建

    在一个商业软件中,会有很多的界面,如果没一个界面对应一个activity,那么activity会非常的多,清单文件也会非常的乱,谷歌在android3.0以后引...

    陶士涵
  • 用网卡计算,Mellanox这是要谋反吗?

    按照这个思路, Mellanox在9月3日对外发布了ConnectX-6 Dx、BlueField-2两款芯片,对外称:新一代云Smart NIC和I/O 处理...

    用户5498443
  • 数学和编程能力怎么回事,马维英说这是字节跳动AI Lab招人的首要准则

    在开放日上,深信服总代,现场Demo 展现了许多熟悉而又炫酷的应用。你知道怎样操作聚类算法和CNN 从短视频从抽取最悦目的小姐姐么?你知道怎样用单摄手机拍出柔顺...

    用户3918446
  • 深度学习手把手系列文章归档

    【手把手AI项目】一、安装win10+linux-Ubuntu16.04的双系统(全网最详细)

    小草AI
  • Flutter Boost 混合开发实践与源码解析( Android )

    1. 简介 Flutter Boost 是闲鱼团队开发的一个 Flutter 混合开发框架,项目背景可以看看闲鱼的这篇文章:码上用它开始Flutter混合开发...

    QQ音乐前端团队
  • Python奇技淫巧

    本文用作记录,在使用python过程中遇到的一些奇技淫巧,有些代码是本人所写,有些则是python内置函数,有些则取之互联网。在此记录,只为备份以及遗忘时方便查...

    一墨编程学习
  • Hive数据仓库笔记(三)

    > FROM sales JOIN things ON (sales.id =things.id);

    chaplinthink

扫码关注云+社区

领取腾讯云代金券