【问题标题】:How to process textview for HTML and Linkify如何处理 HTML 和 Linkify 的 textview
【发布时间】:2012-10-20 00:38:34
【问题描述】:

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

"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 模式。

【问题讨论】:

  • 您是否尝试运行Linkify.addlinks(),然后运行Html.fromHtml()?它应该可以工作。
  • 是的,我已经尝试了所有组合。如果我按照这个顺序执行,那么 HTML 链接可以正常工作,但 Linkify 应该处理的其他链接都不会正常工作。

标签: android textview linkify


【解决方案1】:

尝试在你的文本视图上设置移动方法,而不是使用 Linkify:

textView.setMovementMethod(LinkMovementMethod.getInstance());

【讨论】:

  • setMovementMethod() 控制单击链接时发生的情况。所以,我有这个以确保我的 HTML 链接将打开浏览器。但是,它实际上并没有处理如何将链接标识为链接。
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

    这是因为 Html.fromHtmlLinkify.addLinks 在处理文本之前删除了之前的 span。

    使用此代码使其工作:

    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;
    }
    

    【讨论】:

    • 此方法使链接无法点击
    • 还需要设置:textView.setLinksClickable(true); textView.setMovementMethod(LinkMovementMethod.getInstance());或者你的链接失效了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多