2011-04-09 32 views
0

我正在编写一个用于访问StackExchange的Android应用程序,并且正在寻找处理在StackExchange API中使用的简单HTML片段的最佳呈现方式。 API中唯一的HTML位于问题,答案和评论的主体中。评论当然使用HTML的更多受限制的子集。大多数HTML只是简单的格式,如<p>,<b>,<pre>等,但也有<a>和偶尔<img>标签来处理。我正在考虑尝试使用TextView并用样式替换HTML,但这可能太严格了。我看了一下WebView,但看起来似乎过度。 WebViews似乎用于加载外部动态内容并启动多个线程。我只打算在API中提供简单的固定HTML,不包含任何CSS或JavaScript。用于呈现简单HTML片段的方法

另外,我有一个WebViews的编码问题,像卷曲引号这样的字符显示为多个字符,在TextView中使用时它们显示得很好。

回答

1

你可以做的是使用Html.fromHtml()function

它将为您留下一个Spanned - 类型的对象。您可以使用位置上的独立跨度来处理标签?

编辑标签的示例。 情境:带有html标签的文本,使用html.fromhtml工作。但有时这些网址是相对的(使用“/file.html”而不是“http://domain.com/file.html”),因此无法使用。发送spannable到我的函数下面找到一个URL的所有跨度并添加域。你可以使用其他服用点为ofcourse您的特定标签:

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

我不知道这是做的最有效方法,就是是我到spannables第一连接中的一个,但它至少表明一些技巧你可以用spannables做:D

+0

这绝对看起来更像我所希望的。我将不得不一起玩,看看它是否能满足我需要的一切。 – penguin359 2011-04-09 12:33:26

+0

我已经添加了一个例子来展示你可以做的一些事情:) – Nanne 2011-04-09 12:40:18