广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

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

    2018-04-25 21:46:39 次阅读 稿源:互联网
    广告

    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"
    />

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告