2011-04-09 33 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