如何将文本链接设置为实际URL而不是HTML中的文本标记

时间:2012-07-01 04:50:34

标签: java android twitter

我一直在尝试使用模式或其他工具来解决这个问题,但还没有让它工作。

说我有一个HTML链接:

 <a href="http://www.google.com">Google, Inc.</a>

我想要链接到文本视图但是将链接的文本设置为实际的URL而不是Google,Inc。

例如,如果收到的数据是:

- 如果您想尝试搜索,请转到<a href="http://www.google.com">Google, Inc.</a>,这很容易。

我希望它显示为:

- 如果您想尝试搜索,请转到http://www.google.com,这很容易。

而不是:

- 如果您想尝试搜索,请访问Google,Inc。并且这很容易。

Html.fromHtml()将其显示为“Google,Inc。”自动,但不是我想要的结果。

此外,我不需要这个专门用于此示例,我需要它适用于所有html链接,因为我不知道我将获得哪些链接作为数据。

2 个答案:

答案 0 :(得分:1)

它实际上相当棘手......但我找到了一种方法。

感谢SO。

这是答案:

TextView tvYourTextView = ( TextView ) findById( R.id.yourTextViewThatShowsALink );

tvYourTextView.setMovementMethod(LinkMovementMethod.getInstance()); //that will make your links work.

PS: 不要忘记使用Html.fromHtml("your content as html")

答案 1 :(得分:0)

我建议使用Linkify并自行解析字符串以创建所需的链接。

设置Linkify以查找原始网址并将其转换为文字中的链接:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:autoLink="web"
    />

此函数会将原始地址拉出html标记:

public String parseLinks(String raw) {
    String openTag = "<a href=\"";
    String closeTag = "</a>";
    String result = "";

    int start = 0;
    int middle = raw.indexOf(openTag);
    int end;
    while(middle > -1) {
        result += raw.substring(start, middle);

        end = raw.indexOf("\">", middle);
        result += raw.substring(middle + openTag.length(), end);

        start = raw.indexOf(closeTag, end) + closeTag.length(); 
        middle = raw.indexOf(openTag, start);
    }

    result += raw.substring(start, raw.length());
    return result;
}

了解此功能没有错误检查,我建议您自己添加。

现在只需将从parseLinks()返回的String传递给TextView,如下所示:

textView.setText(parseLinks(rawHTML));

希望有所帮助!