android html.fromhtml(字符串)不起作用



我想设置带有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;
    }

我正在将以下字符串传递到函数;

>

hjjgjhghghgjhgjhgjhgj

    • gtttggtttt

但是,当我应用html.fromhtml(html)时;它之后的返回字符串

vgdgffdgdgdgfdfgdfgdfgdfgdfgdfg ............................................................................................................. aererwerwerwerwerwer yyiyuiuyuyuiyiyiyiyiyiyiyiyiyiyiyiyiyiyiyiyhjjjjgjgjhghghghghghggjhgjhgjhgjhgjhgj gtttgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg

我正在使用API 23

在模拟器中运行我的应用程序

请提供一些解决HTML标签的解决方案。

Android支持一些HTML标签。您可以看到Android的支持标签。

Android的html标签

android不支持 ul li 标签。为此,您必须处理

之类的标签
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);
    }
}
}

现在,您只需要使用 ul >或 li 标签创建列表项目字符串。在这种方法中,您只需要通过要显示为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()));

最新更新