如何使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"
,它工作正常。 点击链接将打开浏览器并显示正确的页面。
我可以猜到的一件事是其他一些观点在链接之上。 透明的东西会填满整个父级,但不会在链接上方显示任何内容。 在这种情况下,点击进入该视图而不是链接。
花了一些时间后,我发现:
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"
不与这样的联系工作。
android:autoLink="web"
将覆盖view.setMovementMethod(LinkMovementMethod.getInstance());
(即;第三种链接将突出显示,但不可点击)。 故事的寓意是使用view.setMovementMethod(LinkMovementMethod.getInstance());
在你的代码中,并确保你的XML布局中没有android:autoLink="web"
,如果你想要所有的链接都是可点击的。
上一篇: How do I make links in a TextView clickable?
下一篇: how to set cursor style to pointer for links without hrefs