如何使TextView中的链接可点击?

我有以下TextView定义:

<TextView android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:text="@string/txtCredits"
    android:autoLink="web" android:id="@+id/infoTxtCredits"
    android:layout_centerInParent="true"
    android:linksClickable="true"></TextView>

其中@string/txtCredits是一个字符串资源,其中包含<a href="some site">Link text</a> @string/txtCredits <a href="some site">Link text</a>

Android突出显示TextView中的链接,但它们不响应点击。 有人能告诉我我做错了什么吗? 我是否必须在我的活动中为TextView设置onClickListener,以获得像这样简单的事情?

看起来它与我定义我的字符串资源的方式有关。 这不起作用:

<string name="txtCredits"><a href="http://www.google.com">Google</a></string>

但是这样做:

<string name="txtCredits">www.google.com</string>

这是一个无赖,因为我宁愿显示一个文本链接,而不是显示完整的URL。


埋在API演示中,我找到了解决我的问题的方法:

Link.java:

    // text2 has links specified by putting <a> tags in the string
    // resource.  By default these links will appear but not
    // respond to user input.  To make them active, you need to
    // call setMovementMethod() on the TextView object.

    TextView t2 = (TextView) findViewById(R.id.text2);
    t2.setMovementMethod(LinkMovementMethod.getInstance());

我删除了我的TextView上的大部分属性以匹配演示中的内容。

<TextView
    android:id="@+id/text2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/txtCredits"/>

这解决了它。 很难发现和修复。

重要提示 :如果您正在调用setMovementMethod()不要忘记删除autoLink="web"


我只使用android:autoLink="web" ,它工作正常。 点击链接将打开浏览器并显示正确的页面。

我可以猜到的一件事是其他一些观点在链接之上。 透明的东西会填满整个父级,但不会在链接上方显示任何内容。 在这种情况下,点击进入该视图而不是链接。


花了一些时间后,我发现:

  • 如果你的HTML中有完整的链接, android:autoLink="web"起作用。 以下内容将以蓝色和可点击的形式突出显示:
  • 部分文字<a href="http://www.google.com">http://www.google.com</a>
  • 一些文字http://www.google.com
  • view.setMovementMethod(LinkMovementMethod.getInstance()); 将与以下内容一起工作(将突出显示并可点击):
  • 部分文字<a href="http://www.google.com">http://www.google.com</a>
  • 一些文字http://www.google.com
  • 一些文字<a href="http://www.google.com">Go to Google</a>
  • 请注意,第三个选项有超链接,但链接描述(标签之间的部分)本身不是链接。 android:autoLink="web" 与这样的联系工作。

  • 如果在XML中设置, android:autoLink="web"将覆盖view.setMovementMethod(LinkMovementMethod.getInstance()); (即;第三种链接将突出显示,但不可点击)。
  • 故事的寓意是使用view.setMovementMethod(LinkMovementMethod.getInstance()); 在你的代码中,并确保你的XML布局中没有android:autoLink="web" ,如果你想要所有的链接都是可点击的。

    链接地址: http://www.djcxy.com/p/6223.html

    上一篇: How do I make links in a TextView clickable?

    下一篇: how to set cursor style to pointer for links without hrefs