3

我想删除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);
    }

但它仍然在编译过程中给我一个警告:

警告:(18, 31) [deprecation] fromHtml(String) in Html 已被弃用

4

5 回答 5

4

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

你有四个选择:

  1. 将你的compileSdkVersion低于 24。这会产生涟漪效应(例如,你不能使用 24.xx 版本的支持库)并且不是一个很好的选择。

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

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

  4. 向方法添加适当的@SuppressLint注释,以使 IDE 停止抱怨。正如 Ahlem Jarrar 所说,添加它的最简单方法是通过快速修复。

于 2016-08-29T23:01:57.980 回答
4

如果您minSdkVersion 是 24 或更高版本,请使用fromHtml()带有一些标志作为参数的版本。AFAIK,FROM_HTML_MODE_LEGACY将是用于与较旧的无标志 fromHtml() 兼容的标志值。

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

始终使用fromHtml()you are,可能使用快速修复(Alt-Enter)来抑制 Lint 警告

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

于 2016-08-29T22:57:45.727 回答
1

这是我的解决方案:

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);
}

它工作得很好。

于 2020-01-31T10:07:06.320 回答
0

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 类文档中阅读有关不同标志的更多信息

于 2021-01-28T06:40:25.227 回答
0

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

// 获取我们的 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")
于 2016-08-29T22:56:30.113 回答