1

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

假设我有一个 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 链接,因为我不知道我将获得哪些链接作为数据。

4

2 回答 2

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

于 2012-07-01T05:22:08.207 回答
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() 返回的字符串传递给您的 TextView,如下所示:

textView.setText(parseLinks(rawHTML));

希望有帮助!

于 2012-07-01T04:55:34.937 回答