Android HTML class 支持哪些 HTML 标签?如何使用 HtmlCompat?
Which HTML tags are supported by the Android HTML class and how do I use HtmlCompat?
我正在寻找 Android Html class 支持的 HTML 标签和属性的简明描述,特别是那些由 [=20= 处理的标签]Html#fromHtml()。官方文档指出 "not all HTML tags are supported," 但这并不是很有帮助。我在网上找到的其他文档似乎已过时,而且几乎没有提及受支持的属性。
此外,我认为我应该使用 HtmlCompat 而不是 Html,但我不清楚 是什么HtmlCompat 可以。文档指出 HtmlCompat 是 "backwards compatible version of Html," 但这是什么意思?当 运行 在 API 级别低于 24 的设备上时,我希望 HtmlCompat#fromHtml() 接受与 Html 相同的标签在 API 24+ 设备上使用,但它不会。
Html兼容性
我们先看看HtmlCompat。使用支持库 class(现在是 AndroidX)的一个原因是“在平台的 运行 早期版本的设备上支持最新的平台功能。”通过查看 HtmlCompat 的 source code,很明显它提供的向后兼容性是允许调用 HtmlCompat#fromHtml()(字符串源,
int 标志).
[HtmlCompat#fromHtml(String, int)] invokes Html#fromHtml(String, int) on API 24 and newer, otherwise flags are ignored and Html#fromHtml(String) is used.
所以,HtmlCompat不提供对API以下版本新支持标签的支持API24。事实上,有HtmlCompat 支持的标签和 Html 的平台版本对于任何 API级。
HTML Html/HtmlCompat
支持的标签
(有点过时)
更新:请参阅 here 以获得更多 up-to-date 文档,其中包含以下内容。我还添加了有关 Android 对 HTML 标签的原生支持的信息。 (2021 年 12 月)
AndroidHtml和HtmlCompatclasses支持以下HTML 以 API 24 开头的标签。以下内容基于对 API 29 中 Html class 的检查。
支持 href 标签。
<大>
<块引用> 1
<引用>
<德尔>
>1
支持颜色和字体属性。
… 1
支持带有 Html#ImageGetter.
的 src 标签
>1 2
1 2
<小>
<跨度>2
<罢工>
<子>
<超级>
1
可以使用 Html#TagHandler 支持其他标签。
1 该元素支持 text-align 样式 属性。 text-align 支持的值为:start、center 和 结束。 (不支持 justify。)
2 标签支持color, background[-color] and text-decoration 属性。 text-decoration 唯一支持的值是 line-through。有关颜色支持的详细信息,请参见下文。
3 face 可以是 TypefaceSpan class.
支持的任何字体名称
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 处理器应在每个命名的 block-level 元素后添加一个换行符。如果未设置标志,则处理器会添加两个换行符,这是遗留行为。
例如:设置FROM_HTML_SEPARATOR_LINE_BREAK_HEADING会在标题(
、等)后加一个换行符
FROM_HTML_MODE_LEGACY:如果设置了这个标志,那么每个block-level元素后都会添加两个换行符。设置此标志与传递零相同。
FROM_HTML_MODE_COMPACT:使用此标志与指定所有换行标志相同,这将从 block-level 元素中删除所有额外的换行符。 (只会添加一个换行符。)
FROM_HTML_OPTION_USE_CSS_COLORS:对于命名颜色,使用CSS数值代替Android定义的值]颜色 class.
例如,如果将“darkgray”指定为颜色并设置了此标志,则颜色值将为“darkgray”(0xFFA9A9A9) 的 CSS 值,而不是“darkgray”的值在 Color class (0xFF444444) 中定义。如果未设置此标志,则该值将是 Color class.
中的值
CSS 颜色
Color class:
中定义的颜色
浅绿色、黑色、蓝色、青色、深灰色、深灰色、紫红色、灰色、绿色、灰色、浅灰色、浅灰色、青柠色、品红色、栗色、海军蓝、橄榄色、紫色、红色、银色、蓝绿色、白色、黄色
CSS 颜色不同于 Android 颜色 class 颜色是:
深灰色、深灰色、灰色、灰色、浅灰色、浅灰色、绿色
虽然“白色”在颜色 class 中被定义为有效颜色,但其值 (0xFFFFFFFF) 导致处理完全忽略该颜色。这是因为返回值 fr 颜色 class (0xFFFFFFFF) 的“白色”被解释为“未找到”条件 (-1)。
一个work-around是指定颜色“white”为0xFFFFFF,让处理加上前导“FF”。
This 事件报告(“Document Supported HTML Tags for HtmlCompat”)将来可能会提供更多信息。
我正在寻找 Android Html class 支持的 HTML 标签和属性的简明描述,特别是那些由 [=20= 处理的标签]Html#fromHtml()。官方文档指出 "not all HTML tags are supported," 但这并不是很有帮助。我在网上找到的其他文档似乎已过时,而且几乎没有提及受支持的属性。
此外,我认为我应该使用 HtmlCompat 而不是 Html,但我不清楚 是什么HtmlCompat 可以。文档指出 HtmlCompat 是 "backwards compatible version of Html," 但这是什么意思?当 运行 在 API 级别低于 24 的设备上时,我希望 HtmlCompat#fromHtml() 接受与 Html 相同的标签在 API 24+ 设备上使用,但它不会。
Html兼容性
我们先看看HtmlCompat。使用支持库 class(现在是 AndroidX)的一个原因是“在平台的 运行 早期版本的设备上支持最新的平台功能。”通过查看 HtmlCompat 的 source code,很明显它提供的向后兼容性是允许调用 HtmlCompat#fromHtml()(字符串源, int 标志).
[HtmlCompat#fromHtml(String, int)] invokes Html#fromHtml(String, int) on API 24 and newer, otherwise flags are ignored and Html#fromHtml(String) is used.
所以,HtmlCompat不提供对API以下版本新支持标签的支持API24。事实上,有HtmlCompat 支持的标签和 Html 的平台版本对于任何 API级。
HTML Html/HtmlCompat
支持的标签(有点过时)
更新:请参阅 here 以获得更多 up-to-date 文档,其中包含以下内容。我还添加了有关 Android 对 HTML 标签的原生支持的信息。 (2021 年 12 月)
AndroidHtml和HtmlCompatclasses支持以下HTML 以 API 24 开头的标签。以下内容基于对 API 29 中 Html class 的检查。
支持 href 标签。 1 2 1 该元素支持 text-align 样式 属性。 text-align 支持的值为:start、center 和 结束。 (不支持 justify。) Html#fromHtml() 的 flags 参数的值为: FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE 前面的每个标志指定 HTML 处理器应在每个命名的 block-level 元素后添加一个换行符。如果未设置标志,则处理器会添加两个换行符,这是遗留行为。 例如:设置FROM_HTML_SEPARATOR_LINE_BREAK_HEADING会在标题( FROM_HTML_MODE_LEGACY:如果设置了这个标志,那么每个block-level元素后都会添加两个换行符。设置此标志与传递零相同。 FROM_HTML_MODE_COMPACT:使用此标志与指定所有换行标志相同,这将从 block-level 元素中删除所有额外的换行符。 (只会添加一个换行符。) FROM_HTML_OPTION_USE_CSS_COLORS:对于命名颜色,使用CSS数值代替Android定义的值]颜色 class. 例如,如果将“darkgray”指定为颜色并设置了此标志,则颜色值将为“darkgray”(0xFFA9A9A9) 的 CSS 值,而不是“darkgray”的值在 Color class (0xFF444444) 中定义。如果未设置此标志,则该值将是 Color class. Color class: 浅绿色、黑色、蓝色、青色、深灰色、深灰色、紫红色、灰色、绿色、灰色、浅灰色、浅灰色、青柠色、品红色、栗色、海军蓝、橄榄色、紫色、红色、银色、蓝绿色、白色、黄色 CSS 颜色不同于 Android 颜色 class 颜色是: 深灰色、深灰色、灰色、灰色、浅灰色、浅灰色、绿色 虽然“白色”在颜色 class 中被定义为有效颜色,但其值 (0xFFFFFFFF) 导致处理完全忽略该颜色。这是因为返回值 fr 颜色 class (0xFFFFFFFF) 的“白色”被解释为“未找到”条件 (-1)。 一个work-around是指定颜色“white”为0xFFFFFF,让处理加上前导“FF”。 This 事件报告(“Document Supported HTML Tags for HtmlCompat”)将来可能会提供更多信息。
<大>
<块引用> 1
<引用>
<德尔>
支持颜色和字体属性。
…
1
支持带有 Html#ImageGetter.
的 src 标签
<小>
<跨度>2
<罢工>
<子>
<超级>
1
可以使用 Html#TagHandler 支持其他标签。
2 标签支持color, background[-color] and text-decoration 属性。 text-decoration 唯一支持的值是 line-through。有关颜色支持的详细信息,请参见下文。
3 face 可以是 TypefaceSpan class.Html#fromHtml() 标志
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、
等)后加一个换行符
CSS 颜色