gpt4 book ai didi

android - Nougat 上的 Html.fromHtml 不调用自定义 HtmlHandler

转载 作者:太空狗 更新时间:2023-10-29 16:30:32 25 4
gpt4 key购买 nike

我有一个自定义的 TextView,用于显示 html 文本。对于牛轧糖之前的设备,它可以工作。正如您在 Nougat 上已经知道的那样,fromHtml 已被弃用,它需要一个标志..所以我的代码是这样的

 Spannable s = getRichText(text);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
super.setText(Html.fromHtml(s.toString(), Html.FROM_HTML_MODE_COMPACT, this, new HtmlHandler(getContext())), BufferType.SPANNABLE);
} else {
super.setText(Html.fromHtml(s.toString(), this, new HtmlHandler(getContext())), BufferType.SPANNABLE);
}

问题在于,HtmlHandler 类永远不会被调用。 (我已经尝试了所有标志)。在 HtmlHandler 上,我处理标签和样式,例如 background-colorcolor 等等。我已经实现了从 rgbrgbahls 等获取颜色。但是在 Nougat 上它只接受十六进制颜色,因为在 Nougat 上,fromHTML 可以“读取”颜色并显示它们。为什么会这样?我怎样才能保持颜色的方式?如果您有什么不明白,或需要更多详细信息,请告诉我。

我用来测试的html是

<p><strong>Server</strong><u> message</u><strong><u>!!!</strong></u> <span style="background-color: rgb(255,0,0);">Not working on Nugat</span></p>

最佳答案

Html.fromHtml()只会调用你的 TagHandler对于 fromHtml() 的 HTML 标签不认识。在您的示例 HTML 中,您有:

  • <p>
  • <strong>
  • <u>
  • <span>

在您的第一条评论中,您还提到了 div .

其中,fromHtml()已处理<p> , <strong> , 和 <u>at least 2010 ,如果不是更早的话。 fromHtml()在 Android 6.0 中还处理 <div> (请参阅 the source 中的第 488-489 行),我忘记了这种支持是如何进行的。你的TagHandler不会为这些标签中的任何一个调用,并且这种行为并不是特别新。

Android 7.0 添加了对 <span> 的支持(请参阅 the 7.1 source 的第 804-805 行),因此需要 TagHandler 的代码为 <span> 调用Android 7.0 和之前版本之间的行为会有所不同。

一般来说,支持的标签列表是未记录的。欢迎 Google 随时更改受支持标签的名单。

您的选择是:

  • 接受它

  • 获取一些资源 Html.java将它重构到你自己的包中,然后使用该副本,根据需要进行修改

  • 找到一些其他的 HTML-to- Spannable你比较喜欢的源码

关于android - Nougat 上的 Html.fromHtml 不调用自定义 HtmlHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40207611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com