2011-06-03 168 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