2011-06-03 166 views
3

我正在爲android創建一個應用程序,它所做的一件事是將現有的Html放在服務器上,並使用TextView將其顯示給用戶。大多數Html標籤都很好(例如粗體),但像無序列表(又名子彈)使用時無法正確呈現Html.fromHtml(txt)將HTML項目符號轉換爲PlainText

我注意到在android文檔中存在BulletSpan。但是,如何正確使用它絕對沒有任何解釋。

BulletSpan的確能幫助我,我該如何去使用它?

最後,如果它不能幫助我,我怎麼能改變所有的列表在Java中的前面有星號(比如markdown)?

請不要回答,以使用webview。

回答

2

查看android.text.Html的源代碼(here處可用),它看起來像下面的標記轉換fromHtml(String)

  • BR,P,DIV,EM,B,強壯,舉,DFN,我,大,小,字體,BLOCKQUOTE,TT,A,U,SUP,子,H1,H2,H3,H4, h5,h6,img

其中一些標記具有轉換的其他屬性。例如,字體顏色屬性的以下值將被轉換。

  • 淺綠色,黑色,藍色,紫紅色,綠色,灰色,灰,褐紅色,深藍色,橄欖,紫色,紅色,銀色,青色,白色,黃色

不幸的是,我還沒有發現在哪裏記錄這些信息。

要轉換的附加標籤,如UL和李,你需要提供適當的實施Html.TagHandler,爲此Google searching輪番上漲examples

這個希望是有關如何處理翻譯的足夠信息。是否使用BulletSpan,我不能提供任何建議,因爲我不知道我曾經見過一個在做什麼,並且Google searching for android "BulletSpan example"變成零比賽。內部在非公開類android.content.res.StringBlock中,BulletSpan用於表示列表項。所以它的使用看起來很有前景。

1

我一直在努力控制Html.fromHtml()給你的有限控制,最終我放棄了。

我已經使用HtmlCleaner清理Html,然後將它提供給Html.fromHtml(),並且我實現了直接轉換爲Spanned。通過這種方式,我完全控制了元素的渲染方式,儘管我從原始的Html類複製了很多東西。

HtmlCleaner將Html解析爲TagNode對象樹,並實現了一個CleanHtmlParser.fromTageNode()方法。它在這裏:

https://github.com/NightWhistler/PageTurner/blob/master/src/net/nightwhistler/pageturner/html/CleanHtmlParser.java

BulletSpan給了我一些混合的結果,因爲它呈現上線左側的子彈,然後縮進文本代替縮進文字和子彈。我只是用一個邊緣包裹它們,並在文本前面打印了一個unicode bullet字符。

+0

你需要在HTML上使用HtmlCleaner嗎? Html.fromHtml()使用TagSoup來處理「髒」HTML,所以它看起來像你的HTML將被處理兩次。 – 2012-07-11 23:24:04

+0

現在,它演變成了一個獨立的項目,它是Html.fromHtml()的直接替代品:http://github.com/NightWhistler/HtmlSpanner – NightWhistler 2012-12-04 13:51:29

+0

你的圖書館看起來很甜美。我等不及用它了。 – MinceMan 2013-06-04 22:41:23