首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >捕获Android文本中链接点击事件

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

作者头像
技术小黑屋
发布2018-09-04 16:52:24
发布2018-09-04 16:52:24
2.3K0
举报
文章被收录于专栏:技术小黑屋技术小黑屋

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源码

百度云盘

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关键实现
  • 如何使用
  • 实现自己的控制
  • 提醒
  • demo源码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档