Преобразование HTML-маркеров в обычный текст - PullRequest
3 голосов
/ 04 июня 2011

Я нахожусь в процессе создания приложения для Android, и одна из вещей, которую он делает, - это взять существующий HTML на сервере и использовать TextView для отображения его пользователю.Большинство HTML-тегов хороши (например, полужирный), но такие вещи, как неупорядоченные списки (иначе маркеры), не отображаются правильно при использовании Html.fromHtml(txt)

Я заметил, что BulletSpan существует в документах Android,Тем не менее, нет абсолютно никакого объяснения относительно того, как правильно его использовать.

Действительно ли BulletSpan мне поможет, и как я могу его использовать?

Наконец, если это не такПомогите мне, как я могу изменить все списки, чтобы в Java были звездочки (как у markdown)?

Пожалуйста, не отвечайте, чтобы использовать веб-просмотр.

Ответы [ 2 ]

2 голосов
/ 04 июня 2011

Глядя на исходный код для android.text.Html (доступно на здесь ), похоже, что следующие теги преобразованы в fromHtml(String).

  • br, p, div, em, b, сильный, цитировать, dfn, i, большой, маленький, шрифт, blockquote, tt, a, u, sup, sub, h1, h2, h3, h4, h5, h6 img

Некоторые из этих тегов имеют дополнительные атрибуты, которые конвертируются. Например, следующие значения для атрибута цвета шрифта преобразуются.

  • аква, черный, синий, фуксия, зеленый, серый, салатовый, бордовый, темно-синий, оливковый, фиолетовый, красный, серебристый, чирок, белый, желтый

К сожалению, я не нашел, где эта информация задокументирована.

Для преобразования дополнительных тегов, таких как ul и li, вам необходимо предоставить соответствующую реализацию Html.TagHandler , для которой поиск в Google приводит к примерам .

Надеюсь, этой информации достаточно для того, чтобы справиться с переводом. Использовать ли BulletSpan, я не могу дать никакого совета, так как я не знаю, видел ли я его в действии, и Google, ищущий андроид "BulletSpan example" , показывает ноль совпадений. Внутри закрытого класса android.content.res.StringBlock, BulletSpan используется для представления элемента списка. Таким образом, его использование выглядит многообещающе.

1 голос
/ 11 декабря 2011

Я боролся с ограниченным контролем, который дает вам Html.fromHtml (), и я наконец отказался.

Я уже использовал HtmlCleaner для очистки Html перед подачей его в Html.fromHtml (), и я только что реализовал прямое преобразование в Spanned. Таким образом, у меня был полный контроль над тем, как элементы отображались, хотя я много копировал из исходного класса Html.

HtmlCleaner будет анализировать Html в дереве объектов TagNode, и я реализовал метод CleanHtmlParser.fromTageNode (). Это здесь:

https://github.com/NightWhistler/PageTurner/blob/master/src/net/nightwhistler/pageturner/html/CleanHtmlParser.java

BulletSpan дал мне несколько смешанных результатов, потому что он отображает маркеры слева от строки и затем делает отступ текста вместо отступа текста и маркеров. Я просто обернул их в поле и напечатал символ маркера Unicode перед текстом.

...