小编典典

Android N 中不推荐使用 Html.fromHtml

all

Html.fromHtml用来查看 .html 中的 html TextView

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

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

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


阅读 112

收藏
2022-03-29

共1个答案

小编典典

更新 :正如下面提到的@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转换为附加参数。这使您可以更好地控制使用哪个标志。

2022-03-29