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 исходный код, который вам больше нравится

Другие вопросы по тегам