8

我正在尝试获取一个文本视图来处理超链接以及电话号码。说我的文字是:

"555-555-555, www.google.com, <a href="www.google.com">Google!</a>"

如果我在这个字符串上运行 Html.fromHtml(),那么 TextView 会显示 Google!正确地作为可点击的链接,但不是其他两个。

如果我在 TextView 上运行 Linkify.addLinks(TextView, Linkify.All),那么前两个被正确识别为电话号码和 url,但最后一个中没有处理 html。

如果我同时运行它们,那么其中一个或另一个将受到尊敬,但不能同时运行。(Html.fromHtml 将删除那里的 html 标签,但如果在之后调用 linkify,它将不是链接)

关于如何让这两个功能同时工作的任何想法?那么所有的链接都被正确处理了吗?谢谢!

编辑:此外,文本是动态更改的,因此我不确定如何为此设置 Linkify 模式。

4

3 回答 3

8

这是因为在处理文本Html.fromHtml之前Linkify.addLinks删除了以前的跨度。

使用此代码使其工作:

public static Spannable linkifyHtml(String html, int linkifyMask) {
    Spanned text = Html.fromHtml(html);
    URLSpan[] currentSpans = text.getSpans(0, text.length(), URLSpan.class);

    SpannableString buffer = new SpannableString(text);
    Linkify.addLinks(buffer, linkifyMask);

    for (URLSpan span : currentSpans) {
        int end = text.getSpanEnd(span);
        int start = text.getSpanStart(span);
        buffer.setSpan(span, start, end, 0);
    }
    return buffer;
}
于 2013-06-19T21:04:57.140 回答
1

尝试在您的 textview 上设置移动方法,而不是使用 Linkify:

textView.setMovementMethod(LinkMovementMethod.getInstance());
于 2012-10-30T23:13:25.603 回答
0

在 TextView 的 xml 布局中,您应该添加以下内容:

android:autoLink="all"
android:linksClickable="true"

然后你应该在 Java 中删除你的 Linkify 代码。

它以某种方式工作,但我不知道为什么。我添加了一个问题,看看是否有人可以解释这种行为:Using Linkify.addLinks combine with Html.fromHtml

于 2013-01-26T15:01:15.983 回答