如何处理HTML和Linkify的textview

时间:2012-10-30 15:59:10

标签: android textview linkify

我正在尝试使用textview来处理超链接和电话号码。说我的文字是:

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:5)

这是因为Html.fromHtmlLinkify.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;
}

答案 1 :(得分:1)

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

textView.setMovementMethod(LinkMovementMethod.getInstance());

答案 2 :(得分:0)

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

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

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

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