Android:删除 Html.fromHtml 的弃用警告

Android: remove deprecation warning for Html.fromHtml

我想删除 Html.fromHtml(string) 的弃用警告。

我试过这样做:

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
        htmlSpanned = Html.fromHtml(string,Html.FROM_HTML_MODE_LEGACY);
    } else {
        //noinspection deprecation
        htmlSpanned = Html.fromHtml(string);
    }

但是在编译过程中仍然给我警告:

Warning:(18, 31) [deprecation] fromHtml(String) in Html has been deprecated

你可以试试。我的意思是你的代码看起来不错,我试过了并且对我有用。

//获取我们的html内容

String htmlAsString = getString(R.string.html);
Spanned htmlAsSpanned = Html.fromHtml(htmlAsString);

// 被 TextView 使用

// 在 TextView

上设置 html 内容
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText(htmlAsSpanned);

我们的你可以试试:

@SuppressWarnings("deprecation")

如果您的 minSdkVersion 是 24 或更高,请使用 fromHtml() that takes some flags as a parameter 的版本。 AFAIK,FROM_HTML_MODE_LEGACY 将是用于与旧的无标志 fromHtml() 兼容的标志值。

如果您的 minSdkVersion 低于 24,您的选择是:

始终使用你现在的 fromHtml(),可能使用快速修复 (Alt-Enter) 来抑制 Lint 警告

使用两个版本的 fromHtml():如果您的应用是 运行 在 API 级别 24+ 设备上,则使用标记的版本,或者在旧设备上没有标记的版本.

好吧,单参数 fromHtml() 已弃用。 Build 检查确保您不会 在旧设备上调用 它,但它不会改变它已被弃用的事实 compileSdkVersion 为 24.

您有四个选择:

  1. compileSdkVersion 降低到 24 以下。这会产生连锁反应(例如,您不能使用支持库的 24.x.x 版本)并且不是一个很好的选择。

  2. minSdkVersion 设置为 24 并摆脱单参数 fromHtml() 调用。这在2016年是不切实际的。

  3. 接受删除线和 Lint 投诉。

  4. 在方法中添加适当的 @SuppressLint 注释,让 IDE 停止抱怨。 As Ahlem Jarrar notes,最简单的添加方法是通过快速修复。

这是我曾经的解决方案:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    textField.setText(Html.fromHtml(htmlText, Html.FROM_HTML_MODE_COMPACT));
} else {
    textField.setText(Html.fromHtml(htmlText);
}

它工作得很好。

Android 或 Kotlin 或 Google 已经创建了 HtmlCompat 可以用来代替方法 Html。将此依赖项实现 'androidx.core:core:1.0.1' 添加到应用程序的 build.gradle 文件中。确保使用最新版本的 androidx.core:core.

这允许您使用:

 HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY);

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

您可以在 HTML Class documentation

上阅读更多关于不同标志的信息