我有一个自定义的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无法识别的html标记调用fromHtml()。在您的示例html中,您有:
<p>
<strong>
<u>
<span>
在您的第一条评论中,您还提到了div
其中,fromHtml()at least 2010起处理过<p><strong><u>,如果不是更早的话。android 6.0中的fromHtml()也可以处理<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到-Spannable的源代码

10-07 23:15