Android N 中不推荐使用 Html.fromHtml

新手上路,请多包涵

我正在使用 Html.fromHtml TextView 查看 html。

 Spanned result = Html.fromHtml(mNews.getTitle());
...
...
mNewsTitle.setText(result);

但是 Html.fromHtml 现在在 Android N+ 中已弃用

什么/我如何找到这样做的新方法?

原文由 Aldasa 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

更新:正如 下面提到的@Andy, 谷歌创建了 HtmlCompat 可以用来代替下面的方法。将此依赖 implementation 'androidx.core:core:1.0.1 添加到应用程序的 build.gradle 文件中。确保使用最新版本的 androidx.core:core

这允许您使用:

 HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY);

您可以在 HtmlCompat 文档 中阅读有关不同标志的更多信息

原始答案: 在 Android N 中,他们引入了一种新的 Html.fromHtml 方法。 Html.fromHtml 现在需要一个名为 flags 的附加参数。此标志使您可以更好地控制 HTML 的显示方式。

在 Android N 及更高版本上,您应该使用这种新方法。旧方法已弃用,可能会在未来的 Android 版本中删除。

您可以创建自己的 Util 方法,它将在旧版本上使用旧方法,在 Android N 及更高版本上使用新方法。如果您不添加版本,请检查您的应用程序将在较低的 Android 版本上中断。您可以在 Util 类中使用此方法。

 @SuppressWarnings("deprecation")
public static Spanned fromHtml(String html){
    if(html == null){
        // return an empty spannable if the html is null
        return new SpannableString("");
    }else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        // FROM_HTML_MODE_LEGACY is the behaviour that was used for versions below android N
        // we are using this flag to give a consistent behaviour
        return Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY);
    } else {
        return Html.fromHtml(html);
    }
}

如果需要,您可以将 HTML.FROM_HTML_MODE_LEGACY 转换为附加参数。这使您可以更好地控制使用哪个标志。

您可以在 Html 类文档 中阅读有关不同标志的更多信息

原文由 Rockney 发布,翻译遵循 CC BY-SA 4.0 许可协议

对于 Kotlin 用户,我们可以使用 String.parseAsHtml() 扩展函数,该函数使用 HtmlCompat 进而进行兼容性检查。

这可以从 androidx.core:core-ktx 的 android core kotlin 扩展中获得

原文由 Hrudhay 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题