我定义了以下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>
的字符串资源。
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"/>
解决了。很难发现和修复。
重要:如果您正在呼叫autoLink="web"
,请不要忘记删除setMovementMethod()
。
以下内容适用于在Android应用程序中查找文本和超链接组合的任何人。
对我来说最简单的方法是使用Linkify
Richard,下一次,您应该改为在布局XML的TextView下添加此代码。
通过使用linkify:
这里有一行Android代码,无论字符串和数据是什么,都可以从textView中选择电话和url。您不需要为此使用任何HTML标记。
我注意到因此使用了android:autoLink="web"
[在正确格式化的setAutoLinkMask(Linkify.ALL)
链接(例如,setMovementMethod(LinkMovementMethod.getInstance())
)上使用Html.fromHTML()
和HTML
时,请确保不
您只需要这个:
使用此...
接受的答案是正确的,但这意味着电话号码,地图,电子邮件地址和常规链接,例如没有href标记的http://google.com
将无法再点击,因为您无法在xml中进行自动链接。
我仅使用android:autoLink="web"
,它工作正常。单击链接将打开浏览器并显示正确的页面。
我可以猜测的是链接上方还有其他视图。透明的内容会填充整个父对象,但在链接上方不会显示任何内容。在这种情况下,单击将转到此视图而不是链接。
这是我解决TextView中可点击和可见链接的方式(通过代码)
使用下面的代码:
[Tested in Pre-lollipop as well as in Lollipop and above]
您遇到问题的原因是,它仅尝试匹配“裸”地址。例如“ www.google.com”或“ http://www.google.com”。
同时管理Linkify文本颜色
自动链接电话不适用于我。以下内容非常有魅力,
将CDATA添加到您的字符串资源中
不知道是否值得添加另一个答案,但以防万一...
如果使用基于XML的TextView,根据您的要求,您只需要做两件事:
我使用自动链接对文本进行“下划线”,但是只是创建了一个“ onClick”来对其进行管理。 (我自己遇到了这个问题)
花了一些时间之后,我发现:
android:autoLink="web"
如果在HTML中具有完整链接,则可以使用。以下内容将以蓝色突出显示并单击:
- 某些文本
<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"
NOT是否可用于此类链接。
android:autoLink="web"
如果以XML设置将覆盖view.setMovementMethod(LinkMovementMethod.getInstance());
(即,第三种链接将突出显示,但不可单击)。故事的寓意是在代码中使用view.setMovementMethod(LinkMovementMethod.getInstance());
,如果希望all链接可单击,请确保XML布局中没有android:autoLink="web"
。
只是浪费了很多时间弄清楚您必须使用getText(R.string.whatever)而不是getString(R.string.whatever ......]
无论如何,这就是我的工作方式。在同一文本视图中也具有多个超链接。
TextView termsTextView = (TextView) getActivity().findViewById(R.id.termsTextView);
termsTextView.append("By registering your account, you agree to our ");
termsTextView.append(getText(R.string.terms_of_service));
termsTextView.append(", ");
termsTextView.append(getText(R.string.fees));
termsTextView.append(", and the ");
termsTextView.append(getText(R.string.stripe_connected_account_agreement));
termsTextView.setMovementMethod(LinkMovementMethod.getInstance());
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/termsTextView"/>
上面的解决方案对我来说不起作用,但是下面的解决方案对我来说似乎有效。首先,在字符串资源中,使用HTML实体编码(即:]]定义标签开头的人字形
<a href="http://www.google.com">Google</a>
并且不是:
开头<a href="http://www.google.com">Google</a>
通常,像这样对字符串中的所有V形进行编码。顺便说一句,链接必须以
http://
然后(根据建议here)在TextView上设置此选项:
android:linksClickable="true"
最后,在代码中,执行:
((TextView) findViewById(R.id.your_text_view)).setMovementMethod(LinkMovementMethod.getInstance()); ((TextView) findViewById(R.id.your_text_view)).setText(Html.fromHtml(getResources().getString(R.string.string_with_links)));
就是这样,不需要正则表达式或其他手动技巧。
我简单地使用了它
如果您想添加类似HTML的链接,您所需要做的就是:
我将此行添加到TextView
:android:autoLink="web"
以下是布局文件中用法的示例。
您只需要在xml的文本视图中添加此内容
希望对您有所帮助;