【问题标题】:Links in TextViewTextView 中的链接
【发布时间】:2011-06-15 00:20:12
【问题描述】:

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

如果没有Linkify 的使用,我怎样才能使它工作?

【问题讨论】:

  • 你的问题不是很清楚。另外,你为什么不想使用linkify?
  • 当你点击 textview 时,你必须告诉你的应用做什么(点击事件 -> 打开链接
  • 不,我不想用 linkify 来做

标签: android textview hyperlink


【解决方案1】:

感谢大家的帮助。

在我在 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());

希望这对其他人有所帮助...

【讨论】:

  • 此解决方案忽略任何电话号码和电子邮件地址链接。我还没有找到在同一个TextView 中处理各种链接(网络、电话、电子邮件……)的解决方案。
  • 我有一个带有 json 响应数据的文本视图。该响应包含描述和邮件 ID 和电话号码我如何在该文本视图 android 中为邮件 ID 和手机号码提供点击事件。
  • 我已经这样做了,但我怎么知道用户点击了它以进行跟踪?
  • 注意:如果您在 TextView 的属性中设置了自动链接某些属性,这将不起作用!如果有,必须在调用 setText() 之前调用 textView.setAutoLinkMask(0);
【解决方案2】:

从 html 获取链接有点棘手:

  1. 通过 xml android:text="@string/…setText() 应用您的文本(查看其他答案)

  2. 使用textView.setMovementMethod(LinkMovementMethod.getInstance()) 使链接可点击(查看其他答案)

  3. NOTandroid:autoLink="web" 添加到您的 XML 资源(TextView 部分),否则 A 标记将无法正确呈现并且不再可点击。

备注1:
如果您的TextView 仅包含一个链接并且您想要触发导航,即使用户点击了您的链接,但在TextView 内部,OnClickListener 可能会有所帮助。

备注 2:
android:linksClickable="true" 仍然不起作用(从 Android 3.2 开始),请使用 p。 2改为

【讨论】:

  • 这是一个。谢谢!
  • 这对我也有帮助!谢谢。
  • 如果在 TextView xml 中从资源中添加链接字符串将不起作用。它只适用于我的setText(Html.fromHtml(getResources().getString(R.string.STRING_NAME)))
【解决方案3】:

Linkify 是您必须用来创建链接的类。 BTW,不使用Linkify的原因是什么?

您可以链接文本视图中的所有文本,以根据架构访问网站或拨打电话号码等操作。 Android 提供了最简单的方法。考虑下面的代码。

TextView noteView = (TextView) findViewById(R.id.noteview);
noteView.setText(someContent);
Linkify.addLinks(noteView, Linkify.ALL);

对于创建自定义链接,同一个 Linkify 类提供了各种选项。 谷歌已经发布了a blogpost on this

【讨论】:

  • 感谢您的帮助,您能指导我如何删除下划线吗?
  • 这不适用于&lt;a href="http://blah.com"&gt;http://blah.com&lt;/a&gt; 之类的链接。
【解决方案4】:

我想不通,但当我做了类似的事情时它终于开始工作了:

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" />

和字符串资源:

<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

确保你也检查它。

【讨论】:

  • 绝对正确!感谢您花时间写下来!人们!答案就在这里!!!!
  • 有用的答案,对我有很大帮助,谢谢!
  • 谢谢!我在这个问题和其他类似问题中尝试了所有其他答案,但没有一个有效。如果没有 CDATA,它也无法工作。
  • 谢谢。对我来说也可以工作......但仅限于 Manifest.xml 上的
【解决方案5】:

使用

android:linksClickable="true"
android:autoLink="web"

【讨论】:

  • 这是最简单的方法,效果很好
【解决方案6】:

由于某种原因,我无法回复您的回答;我只是想说你可以省略textView.setText 并将其放入字符串资源中,然后使用android:text 进行设置。你只需要保留textView.setMovementMethod(LinkMovementMethod.getInstance());;不幸的是,android:linksClickable="true" 本身不起作用。

【讨论】:

    【解决方案7】:

    要动态添加链接(从服务器获取),这是可行的:

    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>
    

    这会将“动态链接”添加到您的文本视图中,如果您触摸它,它将转到您的服务器提供的链接。

    【讨论】:

      【解决方案8】:

      解决方案:Linkify.addLinks(chatText,Linkify.ALL);

      【讨论】:

        【解决方案9】:

        这非常正确:(在 textview 属性中,在 xml 文件中)

        android:autolink="web"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-06-29
          • 1970-01-01
          • 2016-07-11
          • 1970-01-01
          • 2016-12-13
          • 2011-10-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多