我需要在TextView
中添加一个链接,我有一个包含标记<a href="link">Text for link</a>
的字符串和其他一些文本。
问题是,如果我运行项目,我可以看到文本,但它不可点击。我也尝试使用<b>
标记,看看它是否有效,而且它似乎也不起作用。
如何在没有Linkify
用法的情况下使其工作?
答案 0 :(得分:114)
感谢您的帮助。
在我在android示例中找到一些示例之后,我已经成功完成了这项工作。
这是代码:
textView.setText(Html.fromHtml(
"<b>text3:</b> Text with a " +
"<a href=\"http://www.google.com\">link</a> " +
"created in the Java source code using HTML."));
textView.setMovementMethod(LinkMovementMethod.getInstance());
希望这有助于其他人......
答案 1 :(得分:41)
从html获取链接有点棘手:
通过xml android:text="@string/…
或setText()
申请您的文字(请参阅其他答案)
使用textView.setMovementMethod(LinkMovementMethod.getInstance())
点击链接(参见其他答案)
不向您的XML资源添加android:autoLink="web"
(部分TextView
),否则A标记无法正确呈现且无法再点击。< / p>
备注1:
如果您的OnClickListener
仅包含一个链接,并且您希望触发导航,即使用户点击了您的链接,但TextView
内也是TextView
,那么android:linksClickable="true"
可能会有所帮助。
备注2:
{{1}}仍然不起作用(从Android 3.2开始),请使用p。而是
答案 2 :(得分:28)
Linkify是您必须用来创建链接的类。顺便说一句,不使用Linkify的原因是什么?
您可以将textview中的所有文字链接到访问网站或根据架构调用电话号码等操作。 Android提供了最简单的方法。请考虑以下代码。
TextView noteView = (TextView) findViewById(R.id.noteview);
noteView.setText(someContent);
Linkify.addLinks(noteView, Linkify.ALL);
为了创建自定义链接,相同的Linkify类提供了各种选项。 Google已发布a blogpost on this。
答案 3 :(得分:23)
我无法理解,但最后当我做了类似的事情时,它开始工作了:
tvTermsOfUse.setText(Html.fromHtml(getString(R.string.tv_terms_of_use_html)));
Linkify.addLinks(tvTermsOfUse, Linkify.ALL);
tvTermsOfUse.setMovementMethod(LinkMovementMethod.getInstance());
文字视图如下:
<TextView
android:id="@+id/tv_terms_of_use"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:textAlignment="gravity"
android:gravity="center"
android:textColor="@android:color/white"
android:textSize="15sp" />
和字符串res:
<string name="tv_terms_of_use_html">
<![CDATA[This is link to <a href="http://google.com/">Google</a>.]]>
</string>
重要部分:
Linkify.addLinks
必须在 tvTermsOfUse.setMovementMethod
之前完成,否则无效。
XML中无需其他设置。
我花了大约一个小时来弄清楚自己,希望它有所帮助。
修改强>
根据@rfellons评论
感谢。对我来说也是作品...但只有
<uses-permission android:name="android.permission.INTERNET"/>
在Manifest.xml上。 - rfellons 9月7日13:31
请务必检查它。
答案 4 :(得分:20)
使用
android:linksClickable="true"
android:autoLink="web"
答案 5 :(得分:3)
由于某种原因,我不能回复你的答案;我只想说你可以省略textView.setText
并将它放在字符串资源中,并使用android:text
进行设置。你只需要保留textView.setMovementMethod(LinkMovementMethod.getInstance());
;遗憾的是android:linksClickable="true"
本身不起作用。
答案 6 :(得分:1)
解决方案:Linkify.addLinks(chatText,Linkify.ALL);
答案 7 :(得分:0)
这非常正确:(在textview属性中,在xml文件中)
android:autolink="web"
答案 8 :(得分:0)
要动态添加链接(从服务器获取),这可以:
textView.setText(Html.fromHtml(
"<a href=" + response.getLink()
+ ">" + context.getString(R.string.link_from_server) + "</a> "));
并在XML中添加:
android:linksClickable="true"
如果你的strings.xml有这个:
<string name="link_from_server">Dynamic Link</string>
这将添加&#34;动态链接&#34;到您的文本视图,如果您触摸它,它将转到您的服务器提供的链接。