-3

我想用 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…………

aererwewrwerwer

yyiyuuuuyuuyiyiuy

hjjgjhghghgjhgjhgj

  • 呸呸呸呸
  • 呸呸呸 

但是当我应用 Html.fromHtml(html); 它返回以下字符串

vgdgffdgdgfdfgdfgdfgdfgdfg.......... aererwerewrwerwer yyiyuiuuyuuyiyiuy

我正在使用 API 23 在模拟器中运行我的应用程序

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

4

1 回答 1

0

Android 支持一些 Html 标签。你可以看到android支持的标签。

Android 支持的 Html 标签

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()));
于 2017-02-24T06:18:44.173 回答