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

时间:2016-10-23 20:44:13

标签: android android-7.0-nougat fromhtml

我有自定义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>

1 个答案:

答案 0 :(得分:5)

Html.fromHtml()只会针对TagHandler无法识别的HTML代码调用fromHtml()。在您的示例HTML中,您有:

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

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

其中fromHtml()处理<p><strong><u>以及at least 2010,如果不是更早的话。 Android 6.0中的fromHtml()也处理<div>(请参阅the source中的第488-489行),我忘记了支持的后退方式。 <* 1}}不会为任何这些标记调用,而且这种行为并不是特别新的。

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

通常,支持的标记列表未记录。欢迎谷歌随时更改支持标签的名单。

您的选择是:

  • 与之共存

  • 将源代码添加到您喜欢的某些<span>,将其重构到您自己的包中,然后使用该副本,根据需要进行修改

  • 查找您更喜欢的其他HTML到Html.java源代码