Android TextView上支持的html标记
我需要Android TextView上支持的HTML标记的正式列表。 我正在使用Android TextView上支持的html标记,android,html,textview,tags,settext,Android,Html,Textview,Tags,Settext,我需要Android TextView上支持的HTML标记的正式列表。 我正在使用textView.setText(Html.fromHtml(label))但我不知道支持哪些标记。注意: 这是针对API 27的。早期版本不保证支持此列表中的标记,后续版本也一样(可以删除)。有关适用列表,请参见适用API版本的等效类 似乎这些都没有记录在案(更正,2021:),也没有具体的标签添加时间列表(2021:似乎仍然如此)。我认为HTML标记需要在某个地方声明,如果不是在文档中,至少是在代码中。幸运的
textView.setText(Html.fromHtml(label))代码>但我不知道支持哪些标记。注意:
这是针对API 27的。早期版本不保证支持此列表中的标记,后续版本也一样(可以删除)。有关适用列表,请参见适用API版本的等效类
似乎这些都没有记录在案(更正,2021:),也没有具体的标签添加时间列表(2021:似乎仍然如此)。我认为HTML标记需要在某个地方声明,如果不是在文档中,至少是在代码中。幸运的是,Android的HTML解析非常简单,可以轻松地理解相关的内容,而无需过多地使用垃圾桶
对于将来的版本:您可以使用IntelliJ或其他IDE来探索Html.java的源代码,也可以随时访问AOSP站点或等效的GitHub存储库。使用IDE可能是最简单的选择
Html#fromHtml(String,int)
调用Html#fromHtml(String,int,ImageGetter,TagHandler
。最后一个方法创建一个htmltospan-dconverter
,并返回转换结果。我深入研究了该代码,发现:
其他方法包括受支持的属性(在中):
:
size
显然不受支持
:
调用,这将提供一个属性:
text-align
值得特别注意的是支持的align变量
- 中心-标准和自解释
- 开始-左对齐
- 结束-右对齐
在RTL布局中,开始和结束可能是反向的-我还没有测试过
,和呼叫,从而访问:
文本装饰
似乎仅限于行通过
您可以在这里找到它,请查看Commansware他们在以后的Android版本中肯定添加了更多。对我很有用。@MarkHerscher可能在2017年以后的版本中添加。我会看看是否能找到更新的列表(除非原始源代码更新)更新了帖子。通过源代码查找支持的标记和属性工作!我同意在我能找到的任何地方都没有文档记录,所以我故意含糊其辞。
if (tag.equalsIgnoreCase("br")) {
// We don't need to handle this. TagSoup will ensure that there's a </br> for each <br>
// 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);
}
}
src
color
face
href
text-align
text-decoration
background-color or background
color