TextView中的链接

时间:2011-01-25 06:54:59

标签: android textview hyperlink

我需要在TextView中添加一个链接,我有一个包含标记<a href="link">Text for link</a>的字符串和其他一些文本。 问题是,如果我运行项目,我可以看到文本,但它不可点击。我也尝试使用<b>标记,看看它是否有效,而且它似乎也不起作用。

如何在没有Linkify用法的情况下使其工作?

9 个答案:

答案 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获取链接有点棘手:

  1. 通过xml android:text="@string/…setText()申请您的文字(请参阅其他答案)

  2. 使用textView.setMovementMethod(LinkMovementMethod.getInstance())点击链接(参见其他答案)

  3. 向您的XML资源添加android:autoLink="web"(部分TextView),否则A标记无法正确呈现且无法再点击。< / p>

  4. 备注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;到您的文本视图,如果您触摸它,它将转到您的服务器提供的链接。