android - "ul"、 "li"的 Android N 中未调用 Html 标记处理程序

标签 android spannablestring android-7.0-nougat

我们的应用程序中有一个自定义的 TagHandler 用于项目符号列表等。

html = "<ul><li>First item</li><li>Second item</li></ul>";
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
  result = Html.fromHtml(html,Html.FROM_HTML_MODE_LEGACY, null, new ListHTMLTagHandler(density));
} else {
  //noinspection deprecation
  result = Html.fromHtml(html, null, new ListHTMLTagHandler(density));
}

我的 TagHandler 中的 handleTag() 函数被调用用于 API-23 中的 ulli 和低于但未在 API-24 (Android N) 中调用。

最佳答案

source可以看出在 Html.java 中,TagHandler.handleTag() 只有在框架本身不处理它时才会被调用。

目前,框架似乎并没有很好地处理它。 Android N li tag handling

但即使它做得很好,您仍然希望对其进行自定义。处理此问题的最佳方法是将默认的 ulli 标签替换为您自己的标签。由于框架不会处理您的自定义标签,您的 TagHandler 将被要求处理它。

public static String customizeListTags(@Nullable String html) {
  if (html == null) {
    return null;
  }
  html = html.replace("<ul", "<" + UL);
  html = html.replace("</ul>", "</" + UL + ">");
  html = html.replace("<ol", "<" + OL);
  html = html.replace("</ol>", "</" + OL + ">");
  html = html.replace("<dd", "<" + DD);
  html = html.replace("</dd>", "</" + DD + ">");
  html = html.replace("<li", "<" + LI);
  html = html.replace("</li>", "</" + LI + ">");
  return html;
}

然后你可以像这样处理你的html字符串

html = customizeListTags(html);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
  result = Html.fromHtml(html,Html.FROM_HTML_MODE_LEGACY, null, new CustomTagHandler());
} else {
  //noinspection deprecation
  result = Html.fromHtml(html, null, new CustomTagHandler());
}

关于android - "ul"、 "li"的 Android N 中未调用 Html 标记处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38935756/

相关文章:

Android 通知向 Android 通知声音微调器添加重复项

android - 多个段落上的 LeadingMarginSpan

java - 将标签添加到 ClickableSpan

android - android N 中的多窗口拖放

Android-7.0 : EditText wrong actionId in editor actionlistener

java - 从 EditText 字段获取输入并保存在变量中

android - Plus.PeopleApi.getCurrentPerson 在 Play 服务 8.4 中已弃用。如何使用 GoogleSignInApi 获取用户的名字、姓氏和性别?

java - 在 RecyclerView android Kotlin 上仅更改所选项目的文本颜色

java - 单击时返回整个字符串的 Spannable 字符串

java - Android N + mp4Parser 错误