Android Html.fromHtml(字符串)不起作用

Android Html.fromHtml(String) doesnt work

我想设置带有 HTML 标签效果的字符串。通过使用以下方法我无法做到这一点。它显示正常文本。

@SuppressWarnings("deprecation")
    public static Spanned fromHtml(String html){
        Spanned result;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
            result = Html.fromHtml(html,Html.FROM_HTML_MODE_LEGACY);
        } else {
            result = Html.fromHtml(html);
        }
        return result;
    }

我将以下字符串传递给函数;

vgdgffdgdgfdfgdfgdfgdfgdfg..........

aererwerewrwerwer

yyiyuiuuyuuyiyiuy

hjjgjhghghgjhgjhgj

  • gtttggttt
  • ghgggggg

但是当我申请时 Html.fromHtml(html);它的 return 跟随字符串

vgdgffdgdgfdfgdfgdfgdfgdfg.......... aererwerewrwerwer yyiyuiuuyuuyiyiuy hjjgjhghghgjhgjhgj gtttggtttghgggggg

我是 运行 我在模拟器中的应用 API 23

请提供一些解决方案来处理 HTML 个标签。

Android 支持一些 Html 标签。您可以通过 android.

查看支持的标签

Supproted Html Tag by Android

Android 不支持 ulli 标签。为此你必须处理如下标签

public class HtmlTagHandler implements Html.TagHandler {
boolean first = true;
String parent = null;
int index = 1;
private int mListItemCount = 0;
private Vector<String> mListParents = new Vector<String>();

@Override
public void handleTag(final boolean opening, final String tag, Editable output, final XMLReader xmlReader) {

    if (tag.equals("ul") || tag.equals("ol") || tag.equals("dd")) {
        if (opening) {
            mListParents.add(tag);
        } else mListParents.remove(tag);

        mListItemCount = 0;
    } else if (tag.equals("li") && !opening) {
        handleListTag(output);
    } else if (tag.equalsIgnoreCase("code")) {
        if (opening) {
            output.setSpan(new TypefaceSpan("monospace"), output.length(), output.length(), Spannable.SPAN_MARK_MARK);
        } else {
            Log.d("COde Tag", "Code tag encountered");
            Object obj = getLast(output, TypefaceSpan.class);
            int where = output.getSpanStart(obj);

            output.setSpan(new TypefaceSpan("monospace"), where, output.length(), 0);
        }
    }

}

private Object getLast(Editable text, Class kind) {
    Object[] objs = text.getSpans(0, text.length(), kind);
    if (objs.length == 0) {
        return null;
    } else {
        for (int i = objs.length; i > 0; i--) {
            if (text.getSpanFlags(objs[i - 1]) == Spannable.SPAN_MARK_MARK) {
                return objs[i - 1];
            }
        }
        return null;
    }
}

private void handleListTag(Editable output) {
    if (mListParents.lastElement().equals("ul")) {
        output.append("\n");
        String[] split = output.toString().split("\n");

        int lastIndex = split.length - 1;
        int start = output.length() - split[lastIndex].length() - 1;
        output.setSpan(new BulletSpan(15 * mListParents.size()), start, output.length(), 0);
    } else if (mListParents.lastElement().equals("ol")) {
        mListItemCount++;

        output.append("\n");
        String[] split = output.toString().split("\n");

        int lastIndex = split.length - 1;
        int start = output.length() - split[lastIndex].length() - 1;
        output.insert(start, mListItemCount + ". ");
        output.setSpan(new LeadingMarginSpan.Standard(15 * mListParents.size()), start, output.length(), 0);
    }
}

}

现在您只需使用 ulli 标签创建列表项字符串,如下所示。在这种方法中,您只需传递要显示为 html 列表的字符串数组。

 public static String getHtmlText(String[] s) {
    String ulStart = "<ul>";

    for (int i = 0; i < s.length; i++) {
        ulStart += "<li>" + s[i] + "</li>";
    }

    ulStart += "</ul>";
    return ulStart;
}

你可以这样使用:

textview.setText(Html.fromHtml(htmlString, null, new HtmlTagHandler()));