Html.fromHtml на Nougat не вызывает пользовательский HtmlHandler
У меня есть обычай TextView
, чтобы показать HTML текст. Для pre-Nougat устройств это работает. Как вы уже знаете по 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
и т.д. Но на нуге он принимает только цвета с шестнадцатеричным, потому что на нуге, 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 ответ
Html.fromHtml()
будет только ссылаться на ваш TagHandler
для тегов HTML, которые fromHtml()
не признает В вашем примере HTML у вас есть:
<p>
<strong>
<u>
<span>
и в своем первом комментарии вы также упоминаете div
,
Из тех, fromHtml()
обработал <p>
, <strong>
, а также <u>
хотя бы с 2010 года, если не раньше. fromHtml()
в Android 6.0 также обрабатывает <div>
(см. строки 488-489 в источнике), и я забыл, как обратно эта поддержка идет. Ваш TagHandler
не будет вызван ни для одного из этих тегов, и это поведение не является особенно новым.
В Android 7.0 добавлена поддержка <span>
(см. строки 804-805 из источника 7.1), и поэтому код, который ожидал TagHandler
быть призванным для <span>
будет вести себя по-разному между Android 7.0 и предыдущими версиями.
В общем, список поддерживаемых тегов не документирован. Google может изменить список поддерживаемых тегов в любой момент.
Ваши варианты:
Живи с этим
Возьмите источник для некоторых
Html.java
что вам нравится, реорганизовать его в свой собственный пакет и использовать эту копию, изменяя ее по своему усмотрениюНайдите другой HTML-код на
Spannable
исходный код, который вам больше нравится