zoukankan      html  css  js  c++  java
  • Android中捕获TTextView文本中的链接点击事件方法

    转:http://www.jb51.net/article/60033.htm

    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"
    />
  • 相关阅读:
    Assetbundle创建与加载
    11个超棒的iOS开发学习网站
    UGUI
    Unity3D教程宝典之Shader篇
    解决ngui挡住粒子的问题
    unity 随笔
    进程与线程浅析
    c#语言
    Unity3D中使用委托和事件
    Unity3D中常用的数据结构总结与分析
  • 原文地址:https://www.cnblogs.com/tmlee/p/5103449.html
Copyright © 2011-2022 走看看