将HTML项目符号转换为PlainText

时间:2011-06-03 21:00:21

标签: java android html html-parsing

我正在为Android创建应用程序,其中一项工作是在服务器上使用现有的Html并使用TextView将其显示给用户。大多数Html标签都很好(例如粗体),但在使用Html.fromHtml(txt)

时无法正确呈现无序列表(也称为项目符号)

我注意到android文档中存在BulletSpan。但是,如何正确使用它绝对没有解释。

BulletSpan确实会帮助我,我该如何使用它?

最后,如果它对我没有帮助,我怎样才能改变所有列表,在Java前面用星号(比如markdown)?

请不要回答使用webview。

2 个答案:

答案 0 :(得分:2)

查看android.text.Html的源代码(here处提供),看起来fromHtml(String)转换了以下标记。

  • br,p,div,em,b,strong,cite,dfn,i,big,small,font,blockquote,tt,a,u,sup,sub,h1,h2,h3,h4,h5,h6 ,img

其中一些标记具有转换的其他属性。例如,将转换以下字体颜色属性值。

  • 浅绿色,黑色,蓝色,紫红色,绿色,灰色,石灰,栗色,海军蓝,橄榄色,紫色,红色,银色,蓝绿色,白色,黄色

不幸的是,我没有找到记录此信息的位置。

要转换其他标记,例如ul和li,您需要提供Html.TagHandler的适当实现,Google searching出现examples

希望这是关于如何处理翻译的足够信息。是否使用BulletSpan,我无法提供任何建议,因为我不知道我曾经见过一个在行动中,Google searching for android "BulletSpan example"会出现零匹配。在非公共类android.content.res.StringBlock内部,BulletSpan用于表示列表项。因此,它的使用看起来很有希望。

答案 1 :(得分: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项目符号。