android - 如何在 TagHandler.handleTag(...) 中使用 XMLReader

标签 android html textview xmlreader

我正在尝试将列表( <ul><ol> )添加到 TextView。通常你用

将 HTML 加载到 TextView
textview.setText(Html.fromHtml("some String with HTML in it"));

但这并不适用于所有 HTML 标签。您可以使用覆盖默认值 TagHandler 来扩展对不同标签的支持并调用它

textview.setText(Html.fromHtml("some String with HTML in it", null, new MyTagHandler()));

问题是:android.text.Html.TagHandler.handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) 中的 xmlReader 是什么?包含?是否有可能得到所有<li> <ul> 的数据(或通常包含其内容的任何元素)以某种方式使用

if (tag.equals("ul")) {
  // some call to xmlReader
}

是的,我已经看到了以下主题。我只是在寻找替代解决方案。

最佳答案

XMLReader其实只是一个接口(interface),它定义的方法可以从API documentation读取。

用于处理 ContentHandler 类中的 SAX 事件的 Html 被称为 Html.HtmlToSpannedConverter ,它又使用其私有(private)的 handleStartTag(String,Attributes) 方法来处理 HTML 元素的起始标记。因此开箱即用的支持元素列表似乎是 br, p, div, em, b, strong, cite, dfn, i, big, small, font, blockquote, tt, a, u, sup,子、h1...h6 和 img。最后,如果标记未被识别,则使用作为参数提供给 HtmlToSpannedConverter 的 TagHandler(如果它不为空)。

SAX 处理程序的想法是您只能从中获取事件:这是一个开始标记,这是一个 CDATA block ,这是一个结束标记,等等。处理 XML 文档的另一种方法是使用 DocumentBuilder 来创建它的 Document 对象。当您可能有一个可能无法很好地放入内存的大输入流时,当您需要快速解析文档时,或者当您从某处接收数据并希望在收到之前即时解析它时,使用 SAX 解析器所有的。因此,在使用 SAX 处理程序时不可能在 XML 流中来回跳转。因此,总结一下您的问题“是否有可能获取 <li> 的所有 <ul> 数据”的答案:不,不幸的是不能。

在你的 TagHandler 中,当你遇到一个开始的“ul”标签时,你可能想要发出一个换行符,然后当你输入一个开始的“li”标签时发出一个“•”,当你遇到一个结束的“li”时再次发出一个换行符或“ul”标签。

如果您需要支持嵌套列表,您可以向您的 TagHandler 添加一个计数器,以便它在您每次遇到开始的“ul”时递增,而在遇到结束的“ul”时递减。然后,您可以根据嵌套列表的计数器为项目符号点添加不同数量的缩进。

另一种方法是通过在遇到开始标签时向其中添加一个元素并在遇到结束标签时将其移除来创建元素堆栈。通过遍历堆栈,可以很容易地计算任何给定时间的祖先“ul”元素的数量。

关于android - 如何在 TagHandler.handleTag(...) 中使用 XMLReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11865334/

相关文章:

android - 如何防止用户更改系统日期/时间(在 Android 中)?

android - 不同的字体大小适用于不同的屏幕尺寸

javascript - Vue.js $.ajax() 文档准备好时动态表

javascript - 使用 jQuery 将背景颜色添加到输入文本中

android - 适用于openCV应用程序的基于Android Windows的模拟器?

php - CSS 未链接到 HTML 页面模板

Android DatePickerDialog 怪异的TextView

java - 在TextView中将drawable设置为文本末尾

Android TextView 不填充宽度,为什么?

android - react-native 如何使用链接打开本地文件 url?