Android HTML类支持哪些HTML标签,如何使用HtmlCompat?

5

我正在寻找关于 Android Html 类支持的 HTML 标签和属性的简洁说明,尤其是 Html#fromHtml() 处理的标签。官方文档指出“并非所有 HTML 标签都受支持”,但这并不是很有帮助。我在网上找到的其他文档似乎已经过时了,并且没有提到支持的属性。

此外,我认为应该使用HtmlCompat 而不是 Html,但我不清楚 HtmlCompat 的作用是什么。文档中指出 HtmlCompat 是 " Html 的向后兼容版本" ,但这意味着什么?在运行 API 级别低于 24 的设备上,我希望 HtmlCompat#fromHtml() 接受与 API 24+ 设备上的 Html 相同的标签,但实际上并不是这样。

1个回答

8

HtmlCompat

首先让我们看一下 HtmlCompat。使用支持库类(现在是 AndroidX)的一个原因是“在运行早期平台版本的设备上支持最近的平台功能”。从查看 HtmlCompat源代码 中可以明显看出,它提供的向后兼容性是为了允许调用 HtmlCompat#fromHtml() (String source, int flags)

[HtmlCompat#fromHtml(String, int)] 在 API 24 及更高版本上调用 Html#fromHtml(String, int),否则忽略标志并使用 Html#fromHtml(String)。

对于HtmlCompat#toHtml(Spanned text,int options)也是如此。

因此,HtmlCompat不支持API版本低于API 24的新支持标签。实际上,在任何API级别下,HtmlCompat支持的标签与平台版本的Html没有区别。

Html / HtmlCompat支持的HTML标签

(稍有过时)

更新:请参见here以获取更详细的文档,其中包括关于本机Android支持的HTML标签的信息。(2021年12月)

Android的HtmlHtmlCompat类从API 24开始支持以下HTML标签。以下内容基于在API 29中找到的Html类的检查。

<a> 支持 href 标签。
<b>
<big>
<blockquote>1
<br>
<cite>
<del>
<dfn>
<div>>1
<em>
<font> 支持 color 和 face 属性。
<h1> … <h6>1
<i>
<img> 支持 Html#ImageGetter 中的 src 标签。
<li>>1 2
<p>1 2
<s>
<small>
<span>2
<strong>
<strike>
<sub>
<super>
<tt>
<u>
<ul>1

其他标签可以通过 Html#TagHandler 来支持。

1该元素支持text-align样式属性。 text-align支持的值为:startcenterend。(不支持justify。)

2标签支持colorbackground[-color]text-decoration属性。 text-decoration的唯一支持值是line-through。有关颜色支持的详细信息,请参见下文。

3 face可以是TypefaceSpan类支持的任何字体名称。

Html#fromHtml() 标志

Html#fromHtml()flags参数的值为:

FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE
FROM_HTML_SEPARATOR_LINE_BREAK_DIV
FROM_HTML_SEPARATOR_LINE_BREAK_HEADING
FROM_HTML_SEPARATOR_LINE_BREAK_LIST
FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ITEM
FROM_HTML_SEPARATOR_LINE_BREAK_PARAGRAPH




每个前面的标志都指定HTML处理器应该在每个命名的块级元素后添加一个换行符。如果未设置标志,则处理器将添加两个换行符,这是旧有的行为。
例如:设置FROM_HTML_SEPARATOR_LINE_BREAK_HEADING将在标题(<h1>, <h2>等)后添加一个换行符。 FROM_HTML_MODE_LEGACY:如果设置了此标志,则在每个块级元素后添加两个换行符。设置此标志与传递零相同。 FROM_HTML_MODE_COMPACT:使用此标志与指定所有换行符标志相同,这将从块级元素中删除所有额外的换行符。(只会添加一个换行符。) FROM_HTML_OPTION_USE_CSS_COLORS:对于命名颜色,请使用CSS数字值而不是Android Color类定义的值。
例如,如果指定“darkgray”作为颜色,并设置了此标志,则颜色值将是CSS值“darkgray”(0xFFA9A9A9),而不是Color类中定义的“darkgray”的值(0xFF444444)。如果未设置此标志,则该值将是Color类中的值。

CSS颜色

在Color类中定义的颜色:

aqua、black、blue、cyan、darkgray、darkgrey、fuchsia、gray、green、grey、lightgray、lightgrey、lime、magenta、maroon、navy、olive、purple、red、silver、teal、white、yellow

与Android Color类颜色不同的CSS颜色有:

darkgray、darkgrey、gray、grey、lightgray、lightgrey、green

虽然“white”在Color类中被定义为有效的颜色,但其值(0xFFFFFFFF)会导致处理忽略该颜色。这是因为Color类返回的“white”的值(0xFFFFFFFF)被解释为“未找到”条件(-1)。

一种解决方法是将颜色“白色”指定为0xFFFFFF,让处理程序添加前导的“FF”。 事件报告(“为HtmlCompat支持的HTML标签提供文档”)可能会在未来提供更多信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接