Android TextView上支持的html标签

时间:2017-06-07 10:54:41

标签: android html textview tags settext

我需要Android TextView上支持的html标签的正式列表。 我正在使用textView.setText(Html.fromHtml(label));,但我不知道支持哪些标签。

1 个答案:

答案 0 :(得分:5)

注意:

这是针对API 27.早期版本不保证支持此列表中显示的标记,对于以后的版本也是如此(可以删除它们)。

Mark Herscher的评论让我思考:它有新的标签,但它们并没有在任何地方以纯文本形式记录。我认为HTML标签需要声明某处,如果不是在文档中,则最终在代码中声明。否则代码将无法转换它。显然,有些情况下它不会出现在纯文本中,并且处理可以使用接口和重写的类,但幸运的是,Android会将其保留为纯文本格式。

对于未来版本:您可以使用IntelliJ或其他IDE来浏览Html.java的源代码,也可以随时转到AOSP站点。 Html#fromHtml(String, int)来电Html#fromHtml(String, Int, ImageGetter, TagHandler。最后一个方法创建HtmlToSpannedConverter,并返回转换结果。深入研究该代码,我发现this method

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 </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);
    }
}

其中包含所有受支持的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

其他方法涵盖支持的属性(在<a href="">中,href是属性):

img

src

font

color
face

size显然不受支持。

a

href

p, ul, and div调用startBlockElement,其中包含一个属性:

text-align

span and pli来电startCssStyle,可以访问:

text-decoration
background-color or background
color

text-decoration似乎仅限于line-through