我有以下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"/>

其中@string/txtCredits是一个字符串资源,包含<a href="some site">链接文本</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。


当前回答

将CDATA添加到字符串资源中

Strings.xml

<string name="txtCredits"><![CDATA[<a href=\"http://www.google.com\">Google</a>]]></string>

其他回答

如果你想添加一个类似html的链接,你所需要做的就是:

添加一个类似html的资源字符串: <字符串名称= "链接" > < a href = " https://www.google.pl/ " >谷歌< / > < /字符串> 将你的视图添加到布局中,完全没有链接特定的配置: < TextView android: id =“@ + id /链接” android:文本= " @string /链接" / > ' 添加适当的MovementMethod编程到你的TextView: mLink = (TextView) findViewById(R.id.link); if (mLink != null) { mLink.setMovementMethod (LinkMovementMethod.getInstance ()); }

就是这样!是的,像“autoLink”和“linksClickable”这样的选项只在显式链接上工作(没有包装成HTML标签)对我来说是非常误导的…

如果使用基于xml的TextView,对于你的需求,你只需要做两件事:

识别字符串中的链接,例如“这是我的网页”。 您可以在XML内容或代码中添加它。 在有TextView的XML内容中,添加这些: android: linksClickable = " true " android: autoLink = "网络"

对于那些从XML内容读取字符串和动态赋值有问题的人。

如果您正在使用来自strings.xml资源的文本,那么HTML标记似乎会被剥离。

所以你必须使用<![CDATA[**your string with click links**]]>在strings.xml文件中使用HTML . fromhtml (string)将其转换为HTML。

在花了一段时间之后,我发现:

android:autoLink="web"工作,如果你有完整的链接在你的HTML。以下内容将以蓝色高亮显示,并可点击:

Some text <a href="http://www.google.com">http://www.google.com</a> . 一些文字http://www.google.com

view.setMovementMethod (LinkMovementMethod.getInstance ());将与以下工作(将突出显示和可点击):

Some text <a href="http://www.google.com">http://www.google.com</a> . 一些文字http://www.google.com 一些文本<a href="http://www.google.com">转到谷歌</a>

注意,第三个选项有一个超链接,但是链接的描述(标签之间的部分)本身并不是链接。android:autoLink="web"不工作与这样的链接。

android:autoLink="web"如果在XML中设置将覆盖view.setMovementMethod(LinkMovementMethod.getInstance());(即。第三类链接将被突出显示,但不能点击)。

这个故事的寓意是使用view.setMovementMethod(LinkMovementMethod.getInstance());在你的代码中,确保你没有android:autoLink="web"在你的XML布局中,如果你想要所有的链接都是可点击的。

理查德,下次,你应该在布局XML的TextView下添加这段代码。

android:autoLink="all"

应该是这样的。

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

您不需要使用此代码(t2.setMovementMethod(LinkMovementMethod.getInstance());)来使链接可单击。

另外,这里有一个事实:只要你设置了autoLink和linksClickable,不要忘记在String.xml文件中添加这个,这样可点击的链接就可以工作了。

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