Android 呈现简单HTML片段的方法

Android 呈现简单HTML片段的方法,android,android-widget,html-parsing,stackexchange,Android,Android Widget,Html Parsing,Stackexchange,我正在编写一个用于访问StackExchange的Android应用程序,我正在寻找处理呈现StackExchange API中使用的简单HTML片段的最佳方法。API中唯一的HTML位于问题、答案和注释的主体中。当然,注释使用的是更受限制的HTML子集。大多数HTML只是简单的格式,如,,,等等。但也有和偶尔需要处理的标记。我正在考虑尝试使用TextView并用样式替换HTML,但这可能限制太多。我看了一下WebView,但这似乎有些过分了。WebView似乎适合于加载外部动态内容并启动多个线

我正在编写一个用于访问StackExchange的Android应用程序,我正在寻找处理呈现StackExchange API中使用的简单HTML片段的最佳方法。API中唯一的HTML位于问题、答案和注释的主体中。当然,注释使用的是更受限制的HTML子集。大多数HTML只是简单的格式,如
,等等。但也有
和偶尔需要处理的
标记。我正在考虑尝试使用TextView并用样式替换HTML,但这可能限制太多。我看了一下WebView,但这似乎有些过分了。WebView似乎适合于加载外部动态内容并启动多个线程。我只打算呈现API中提供的简单、固定的HTML,它不包括任何CSS或JavaScript

protected Spanned correctLinkPaths (Spanned spantext) {
    Object[] spans = spantext.getSpans(0, spantext.length(), Object.class);
    for (Object span : spans) {
        int start = spantext.getSpanStart(span);
        int end = spantext.getSpanEnd(span);
        int flags = spantext.getSpanFlags(span);
        if (span instanceof URLSpan) {
            URLSpan urlSpan = (URLSpan) span;

            if (!urlSpan.getURL().startsWith("http")) {
                if (urlSpan.getURL().startsWith("/")) {
                    urlSpan = new URLSpan("http://www.domain.com" + urlSpan.getURL());
                } else {
                    urlSpan = new URLSpan("http://www.domain.com/" + urlSpan.getURL());
                }
            }

            ((Spannable) spantext).removeSpan(span);
            ((Spannable) spantext).setSpan(urlSpan, start, end, flags);
        }
    }
    return spantext;
}

此外,我在WebView中遇到了编码问题,在WebView中,像卷曲引号这样的字符显示为多个字符,在TextView中使用时显示良好。

您可以使用
Html.fromHtml()

它将给您留下一个
跨距的
类型的对象。您可以使用位置上的单独跨距来处理标记

编辑标记的示例。 情境:带有html标记的文本,使用html.fromhtml工作。但有时URL是相对的(使用“/file.html”而不是http://domain.com/file.html)所以它不能被使用。将Spanable发送到下面的my函数将查找URL的所有跨距并添加域。当然,您可以为您的特定标记使用其他内容:


我不确定这是否是最有效的方法,这是我与spannables的第一次联系,但至少它展示了一些你可以用spannables做的技巧:D

这显然更像我所希望的。我将不得不玩一些,看看它是否能满足我的所有需要。我添加了一个示例,只是为了展示一些您可以做的事情:)