捕获Android文本中链接点击事件
16lz
2021-01-25
关注微信号:javalearns 随时随地学Java
或扫一扫
随时随地学Java
Android中的TTextView很强大,我们可以不仅可以设置纯文本为其内容,还可以设置包含网址和电子邮件地址的内容,并且使得这些点击可以点击。但是我们可以捕获并控制这些链接的点击事件么,当然是可以的。
本文将一个超级简单的例子介绍一下如何实现在Android TextView 捕获链接的点击事件。
关键实现
实现原理就是将所有的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. } }; 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;}
如何使用
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方法中加入自己的控制逻辑,比如我们使用傲游浏览器打开点击的链接。
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属性。
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" android:id="@+id/myTextView" android:autoLink="web"/>
关注微信号:javalearns 随时随地学Java
或扫一扫
随时随地学Java
已有 0 人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐
- —软件人才免语言低担保 赴美带薪读研!—
更多相关文章
- Android(安卓)-- Init进程对信号的处理流程
- 高通与安卓水火不容 Android音频系统缺陷测评
- Android(安卓)MVP模式简单例子实战
- Android应用实例之---使用Linkify + 正则式区分微博文本链接及跳
- android lbs 学习笔记
- Android中RxJava+Retrofit+MVP模式的整合(1)—目录设计
- android集成支付宝sdk
- android使用系统资源,链接当前主题中的Style
- 关于socket编程【以聊天为例】