【问题标题】:Html.fromHtml() is deprecated, what is the alternative? [duplicate]Html.fromHtml() 已弃用,有什么替代方案? [复制]
【发布时间】:2016-10-20 08:54:33
【问题描述】:

我更新到 SDK 版本 24,现在 Html.fromHtml() 已弃用。并且 Html 类有一个新方法,带有额外的参数,名为 flag,但它的最小 API 是 24。

对于较低的 API 版本,此功能是否有替代方案?我不想为此使用WebView

【问题讨论】:

    标签: android textview


    【解决方案1】:

    随便用

     if (Build.VERSION.SDK_INT >= 24) {
         Html.fromHtml(String, int) // for 24 api and more
     } else {
         Html.fromHtml(String) // or for older api
     }
    

    将 Html.fromHtml(String, int) 用于 24 api 遵循文档:

    https://developer.android.com/reference/android/text/Html.html

    【讨论】:

    • 我的一个小偏好:if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { Html.fromHtml(String, int) // for 24 api and more } else { Html.fromHtml(String) // or for older api }
    【解决方案2】:

    要么:

    • 在所有 API 级别上使用 Html.fromHtml(String),或者,

    • 在 API 级别 23 和更早的设备上使用 Html.fromHtml(String),在 API 级别 24+ 设备上使用 Html.fromHtml(String, int),使用 Build.VERSION.SDK_INT 找出您正在运行的设备的 API 级别

    在这种情况下,“已弃用”是提示寻找双参数方法,但单参数方法仍然有效,并且(很可能)会在相当长的一段时间内这样做。

    【讨论】:

    • 在 API 级别 24+ Html.fromHtml(string,Html.FROM_HTML_MODE_LEGACY);
    • 您好@CommonsWare,我们可以为此使用 HtmlEscapers 类吗? android.googlesource.com/platform/external/guava/+/3ecfa41/…
    • @m0rpheu5:这似乎不能替代Html
    • 您可以在这篇博文中查看这些标志的作用:medium.com/@yair.kukielka/…
    • "FIELD HARDNESS <mark style=\"font-weight:600;color:#000;\">test</mark> REPORT" 在这种情况下不起作用。 @CommonsWare
    【解决方案3】:

    其实还有一个方法带flag参数

    /** @deprecated */
    @Deprecated
    public static Spanned fromHtml(String source) {
        throw new RuntimeException("Stub!");
    }
    
    public static Spanned fromHtml(String source, int flags) {
        throw new RuntimeException("Stub!");
    }
    

    只需使用带有 flag 参数的 fromHtml 函数。标志参数是

    public static final int FROM_HTML_MODE_COMPACT = 63;
    public static final int FROM_HTML_MODE_LEGACY = 0;
    public static final int FROM_HTML_OPTION_USE_CSS_COLORS = 256;
    public static final int FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE = 32;
    public static final int FROM_HTML_SEPARATOR_LINE_BREAK_DIV = 16;
    public static final int FROM_HTML_SEPARATOR_LINE_BREAK_HEADING = 2;
    public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST = 8;
    public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ITEM = 4;
    public static final int FROM_HTML_SEPARATOR_LINE_BREAK_PARAGRAPH = 1;
    public static final int TO_HTML_PARAGRAPH_LINES_CONSECUTIVE = 0;
    public static final int TO_HTML_PARAGRAPH_LINES_INDIVIDUAL = 1;
    

    【讨论】:

    • 该方法调用需要上面的 API 24,我发现并编辑了我的问题,
    • @OmerKarakose 编译器无法解析整数标志。它期待这种格式: fromHtml (String source, int flags, Html.ImageGetter imageGetter, Html.TagHandler tagHandler)
    • @OmerKarakose 错误:找不到适合 fromHtml(String,int) urlBuilder.setText(Html.fromHtml(encodedUrl1, FROM_HTML_MODE_LEGACY)) 的方法; ^ 方法 Html.fromHtml(String) 不适用(实际和形式参数列表长度不同)方法 Html.fromHtml(String,ImageGetter,TagHandler) 不适用(实际和形式参数列表长度不同)1 错误
    • @Anon 我认为您没有使用 android api level 24 或更高版本。 Html.fromHtml(String source, int flags) 方法与 api 24 一起提供。
    • @OmerKarakose 我在 app:build.gradle 中的目标 api 是 23 是这个问题吗?
    猜你喜欢
    • 2016-08-16
    • 2023-03-13
    • 2022-10-05
    • 2022-06-10
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    相关资源
    最近更新 更多