我有一个自定义的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-color
,color
等。我已经实现了从rgb
,rgba
,hls
等获取颜色,但是在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
的源代码