将 HTML 项目符号转换为纯文本
Posted
技术标签:
【中文标题】将 HTML 项目符号转换为纯文本【英文标题】:Converting HTML Bullets to PlainText 【发布时间】:2011-09-08 03:02:03 【问题描述】:我正在为 android 创建一个应用程序,它所做的一件事就是在服务器上获取现有的 html 并使用 TextView 将其显示给用户。大多数 Html 标签都很好(例如粗体),但使用 Html.fromHtml(txt)
我注意到BulletSpan 存在于 android 文档中。但是,如何正确使用它绝对没有解释。
BulletSpan 真的对我有帮助吗?我该如何使用它?
最后,如果它对我没有帮助,我该如何在 Java 中更改所有列表以在它们的前面加上星号(就像 markdown 一样)?
请不要回答使用 webview。
【问题讨论】:
【参考方案1】:查看android.text.Html
的源代码(可在here获得),看起来下面的标签是由fromHtml(String)
转换的。
其中一些标签具有可转换的附加属性。例如,字体颜色属性的以下值被转换。
水蓝色、黑色、蓝色、紫红色、绿色、灰色、青柠色、栗色、海军蓝、橄榄色、紫色、红色、银色、蓝绿色、白色、黄色很遗憾,我没有找到记录此信息的位置。
要转换其他标签,例如 ul 和 li,您需要提供 Html.TagHandler 的适当实现,Google searching 出现 examples。
希望这是有关如何处理翻译的足够信息。是否使用BulletSpan
,我无法提供任何建议,因为我不知道我曾经见过一个在行动中,而Google searching for android "BulletSpan example" 出现零匹配。在非公共类android.content.res.StringBlock
内部,BulletSpan
用于表示一个列表项。因此,它的用途看起来很有希望。
【讨论】:
【参考方案2】:我一直在与 Html.fromHtml() 给你的有限控制作斗争,我最终放弃了。
在将 Html 提供给 Html.fromHtml() 之前,我已经在使用 HtmlCleaner 来清理 Html,并且我刚刚实现了到 Spanned 的直接转换。这样我就可以完全控制元素的呈现方式,尽管我确实从原始 Html 类中复制了很多内容。
HtmlCleaner 会将 Html 解析为 TagNode 对象树,我实现了 CleanHtmlParser.fromTageNode() 方法。在这里:
https://github.com/NightWhistler/PageTurner/blob/master/src/net/nightwhistler/pageturner/html/CleanHtmlParser.java
BulletSpan 给了我一些混合的结果,因为它在行的左侧呈现项目符号,然后缩进文本而不是缩进文本和项目符号。我只是将它们包裹在边距中,并在文本前面打印了一个 unicode 项目符号字符。
【讨论】:
您需要在 HTML 上使用 HtmlCleaner 吗? Html.fromHtml() 已经使用 TagSoup 来处理“脏”HTML,因此您的 HTML 似乎将被处理两次。 现在它演变成一个单独的项目,它是 Html.fromHtml() 的替代品:github.com/NightWhistler/HtmlSpanner 您的图书馆看起来不错。我迫不及待想使用它。以上是关于将 HTML 项目符号转换为纯文本的主要内容,如果未能解决你的问题,请参考以下文章
将 HTML 代码转换为纯文本,格式可用于文本文件 [重复]