欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android中捕获TTextView文本中的链接点击事件方法

程序员文章站 2022-04-12 12:27:51
android中的ttextview很强大,我们可以不仅可以设置纯文本为其内容,还可以设置包含网址和电子邮件地址的内容,并且使得这些点击可以点击。但是我们可以捕获并控制这些...

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://jb51.net\">jb51.net</> " +
          "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"
/>