我定义了以下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 .
30 回答
对我有用的最简单方法是使用Linkify
它将自动检测textview中文本的网址 .
在API演示中,我找到了解决问题的方法:
Link.java:
我删除了TextView上的大多数属性以匹配演示中的属性 .
这解决了它 . 很难发现并修复 .
Important :如果您正在调用
setMovementMethod()
,请不要忘记删除autoLink="web"
.理查德,下次,您应该在布局XML的TextView下添加此代码 .
这应该是这样的 .
您无需使用此代码(
t2.setMovementMethod(LinkMovementMethod.getInstance());
)即可使链接可单击 .另外,这是事实:只要你设置了autoLink和linksClickable,不要忘记在 String.xml 文件中添加它,这样可点击的链接就可以了 .
接受的答案是正确的,但它意味着电话号码, Map ,电子邮件地址和常规链接,例如
http://google.com
没有href标签将不再可点击,因为你不能在xml中自动链接 .我找到的唯一完整解决方案是以下内容:
并且TextView不应该
android:autolink
. 也没有必要android:linksClickable="true"
;这是默认的 .花了一些时间,我发现:
如果您的HTML中包含完整链接,则
android:autoLink="web"
有效 . 以下内容将以蓝色突出显示并可单击:view.setMovementMethod(LinkMovementMethod.getInstance());
将使用以下内容(将突出显示并可单击):请注意,第三个选项具有超链接,但链接的描述(标记之间的部分)本身不是链接 .
android:autoLink="web"
确实 NOT 使用此类链接 .android:autoLink="web"
如果在XML中设置将覆盖view.setMovementMethod(LinkMovementMethod.getInstance());
(即;第三类链接将突出显示,但不可点击) .故事的寓意是在您的代码中使用
view.setMovementMethod(LinkMovementMethod.getInstance());
,如果您希望所有链接都是可点击的,请确保您的XML布局中没有android:autoLink="web"
.以上解决方案对我不起作用,但以下做了(而且看起来有点清洁) .
首先,在字符串资源中,使用HTML实体编码定义标记打开的V形符号,即:
并不是:
通常,像这样编码字符串中的所有V形符号 . 顺便说一下,链接必须以
http://
开头然后(如建议here)在TextView上设置此选项:
最后,在代码中,执行:
就是这样,不需要正则表达式或其他手动黑客攻击 .
我注意到因此使用
android:autoLink="web"
工作正常的URL,但因为我有一个我想要链接的电子邮件地址和电话号码,我最终使用这一行
android:autoLink="all"
喜欢这个它就像一个魅力 .
这里有一行android代码,无论什么是字符串,什么是数据,都可以从textView中选择手机和网址 . 您不需要为此使用任何HTML标记 .
只是浪费了太多时间来弄清楚你必须使用getText(R.string.whatever)而不是getString(R.string.whatever)......
无论如何,这是我如何工作 . 在同一文本视图中也有多个超链接 .
字符串示例
我简单地使用了这个
给出链接可点击here
我只使用
android:autoLink="web"
并且工作正常 . 单击该链接可打开浏览器并显示正确的页面 .我可以猜到的一件事是其他一些观点在链接之上 . 透明的东西填充整个父级,但不显示链接上方的任何内容 . 在这种情况下,单击将转到此视图而不是链接 .
Autolink手机对我不起作用 . 以下工作就像一个魅力,
如果使用基于XML的TextView,根据您的要求,您只需要做两件事:
标识字符串中的链接,例如“这是我的WebPage” . 您可以在xml或代码中添加它 .
在具有TextView的xml中,添加以下内容:
这就是我在TextView中解决可点击和可见链接的方法(按代码)
我将此行添加到
TextView
:android:autoLink="web"
以下是布局文件中的使用示例 .
layout.xml
样本string.xml
您遇到问题的原因是它只会尝试匹配"naked"地址 . 像"www.google.com"或“http://www.google.com”之类的东西 .
通过Html.fromHtml()运行文本应该可以解决问题 . 你必须以编程方式完成它,但它确实有效 .
你只需要这个:
将此行插入TextView,可以参考Web进行单击 . URL地址设置为此TextView的文本 .
例:
不知道是否值得添加另一个答案,但以防万一......
我不得不在几个地方捕获它,但最终得到了这个版本的代码 .
strings.xml中:
myactivity.xml:
myactivty.java(在onCreate()中):
这将创建两个可点击的超链接,文本
link text1
和link text2
将用户重定向到谷歌 .如果你想添加类似HTML的链接,你需要做的就是:
而已!是的,像“autoLink”和“linksClickable”这样的选项只用于显式链接(不包含在html标签中)对我来说也是非常误导的......
用这个...
并在清单文件中添加权限
以下内容适用于在Android应用中寻找文本和超链接组合的任何人 .
在
string.xml
:现在你可以在任何给定的_155178中利用这个
string
,如下所示:现在,在您的Activity或Fragment中,执行以下操作:
到目前为止,您不需要使用此方法设置
android:autoLink="web"
或android:linksClickable="true"
.我希望你会发现这很有帮助 .
我使用自动链接“自动下划线”文本,但只是做了一个“onClick”来管理它 . (我自己遇到了这个问题)
不需要任何权限,因为您将意图传递给管理这些资源的应用程序(I.E.浏览器) .
这对我有用 . 祝好运 .
Manage Linkify text Color Also
I hope this will help you;
只需要在xml的文本视图中添加它
在正确格式化的
HTML
链接(例如,<a href="http://www.google.com/">Google</a>
)上使用setMovementMethod(LinkMovementMethod.getInstance())
和Html.fromHTML()
时,请确保 not 使用setAutoLinkMask(Linkify.ALL)
.[Tested in Pre-lollipop as well as in Lollipop and above]
您可以从后端或资源文件中获取HTML字符串 . 如果将文本作为资源字符串,请确保添加
CDATA
标记:然后在代码中,您需要获取字符串并将其指定为HTML并设置链接移动方法:
by using linkify: Linkify 获取一段文本和正则表达式,并将文本中的所有正则表达式匹配转换为可单击的链接
别忘了
将CDATA添加到您的字符串资源
strings.xml中
使用以下代码: