作者:唯心-C_436 | 来源:互联网 | 2023-02-01 19:57
我需要Android TextView上支持的html标签的正式列表.我正在使用,textView.setText(Html.fromHtml(label));
但我不知道支持哪些标签.
1> Zoe..:
注意:
这针对API 27.早期版本不保证支持此列表中看到的标记,对于后续版本也是如此(可以删除它们).
Mark Herscher的评论让我思考:它有新标签,但它们没有在任何地方以纯文本形式记录.我认为HTML标签需要在某个地方声明,如果不是在文档中,最终在代码中.否则代码将无法转换它.显然,有些情况下它不会出现在纯文本中,并且处理与接口和重写类一起工作,但幸运的是,Android将其保留为纯文本.
对于未来版本:您可以使用IntelliJ或其他IDE来浏览Html.java的源代码,也可以随时转到AOSP站点.Html#fromHtml(String, int)
电话Html#fromHtml(String, Int, ImageGetter, TagHandler
.最后一个方法创建一个HtmlToSpannedConverter
,并返回转换结果.深入研究该代码,我找到了这个方法:
private void handleStartTag(String tag, Attributes attributes) {
if (tag.equalsIgnoreCase("br")) {
// We don't need to handle this. TagSoup will ensure that there's a for each
// so we can safely emit the linebreaks when we handle the close tag.
} else if (tag.equalsIgnoreCase("p")) {
startBlockElement(mSpannableStringBuilder, attributes, getMarginParagraph());
startCssStyle(mSpannableStringBuilder, attributes);
} else if (tag.equalsIgnoreCase("ul")) {
startBlockElement(mSpannableStringBuilder, attributes, getMarginList());
} else if (tag.equalsIgnoreCase("li")) {
startLi(mSpannableStringBuilder, attributes);
} else if (tag.equalsIgnoreCase("div")) {
startBlockElement(mSpannableStringBuilder, attributes, getMarginDiv());
} else if (tag.equalsIgnoreCase("span")) {
startCssStyle(mSpannableStringBuilder, attributes);
} else if (tag.equalsIgnoreCase("strong")) {
start(mSpannableStringBuilder, new Bold());
} else if (tag.equalsIgnoreCase("b")) {
start(mSpannableStringBuilder, new Bold());
} else if (tag.equalsIgnoreCase("em")) {
start(mSpannableStringBuilder, new Italic());
} else if (tag.equalsIgnoreCase("cite")) {
start(mSpannableStringBuilder, new Italic());
} else if (tag.equalsIgnoreCase("dfn")) {
start(mSpannableStringBuilder, new Italic());
} else if (tag.equalsIgnoreCase("i")) {
start(mSpannableStringBuilder, new Italic());
} else if (tag.equalsIgnoreCase("big")) {
start(mSpannableStringBuilder, new Big());
} else if (tag.equalsIgnoreCase("small")) {
start(mSpannableStringBuilder, new Small());
} else if (tag.equalsIgnoreCase("font")) {
startFont(mSpannableStringBuilder, attributes);
} else if (tag.equalsIgnoreCase("blockquote")) {
startBlockquote(mSpannableStringBuilder, attributes);
} else if (tag.equalsIgnoreCase("tt")) {
start(mSpannableStringBuilder, new Monospace());
} else if (tag.equalsIgnoreCase("a")) {
startA(mSpannableStringBuilder, attributes);
} else if (tag.equalsIgnoreCase("u")) {
start(mSpannableStringBuilder, new Underline());
} else if (tag.equalsIgnoreCase("del")) {
start(mSpannableStringBuilder, new Strikethrough());
} else if (tag.equalsIgnoreCase("s")) {
start(mSpannableStringBuilder, new Strikethrough());
} else if (tag.equalsIgnoreCase("strike")) {
start(mSpannableStringBuilder, new Strikethrough());
} else if (tag.equalsIgnoreCase("sup")) {
start(mSpannableStringBuilder, new Super());
} else if (tag.equalsIgnoreCase("sub")) {
start(mSpannableStringBuilder, new Sub());
} else if (tag.length() == 2 &&
Character.toLowerCase(tag.charAt(0)) == 'h' &&
tag.charAt(1) >= '1' && tag.charAt(1) <= '6') {
startHeading(mSpannableStringBuilder, attributes, tag.charAt(1) - '1');
} else if (tag.equalsIgnoreCase("img")) {
startImg(mSpannableStringBuilder, attributes, mImageGetter);
} else if (mTagHandler != null) {
mTagHandler.handleTag(true, tag, mSpannableStringBuilder, mReader);
}
}
哪个包含所有受支持的HTML标记.此列表可能会在将来的版本中更改(它来自我原来的答案),但您可以自己深入了解源代码以便在以后的版本中找到它.使用上面的代码,这是当前支持的列表:
br
p
ul
li
div
span
strong
b
em
cite
dfn
i
big
small
font
blockquote
tt
a
u
del
s
strike
sub
sup
img
h1
h2
h3
h4
h5
h6
其他方法涵盖支持的属性(in
,href
是属性):
img:
src
字体:
color
face
size
显然不受支持.
一个:
href
p,ul和div调用startBlockElement,它给出一个属性:
text-align
span和p,li调用startCssStyle,它可以访问:
text-decoration
background-color or background
color
text-decoration
似乎仅限于line-through
.