Форматирование длинных абзацев в android TextView - PullRequest
3 голосов
/ 11 января 2020

У меня много текста (более 10000 слов), который я хотел бы отобразить в своем приложении android. Текст содержит маркеры, абзацы и разрывы строк. Я хочу знать, как я могу отобразить в своем приложении без ручного редактирования. Невозможно преобразовать каждый разрыв строки в \n и каждую вкладку в \t. Я также попытался проанализировать данные в HTML, а затем с помощью Html.fromHtml(getString(R.string.text)). Однако дисплей, который я получаю, выглядит совершенно неформатным.

Вот как я хочу, чтобы текст выглядел в приложении:

1 Ответ

3 голосов
/ 11 января 2020
Теги

HTML - это простые решения для простых задач, таких как выделение текста жирным шрифтом, италий c или даже отображение маркеров. Чтобы оформить текст, содержащий теги HTML, вызовите метод Html .from Html. Под капотом формат HTML преобразуется в промежутки. Обратите внимание, что класс Html не поддерживает все теги HTML и стили CSS, такие как выделение маркером маркеров другого цвета.

val text = "My text <ul><li>bullet one</li><li>bullet two</li></ul>"
txtview.text = Html.fromHtml(text)

Пролеты позволяют вам реализовать многостильный текст с более точным мелкая настройка. Например, вы можете определить абзацы вашего текста, чтобы иметь точку маркера, применив BulletSpan. Вы можете настроить разрыв между полем текста и маркером и цветом маркера. Начиная с Android P, вы даже можете установить радиус точки маркера. Вы также можете создать собственную реализацию для span. Ознакомьтесь с разделом «Создание пользовательских диапазонов» ниже, чтобы узнать, как это сделать.

val spannable = SpannableString("My text \nbullet one\nbullet two")
spannable.setSpan(
   BulletPointSpan(gapWidthPx, accentColor),/* start index */ 9, /* end index */ 18,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
   spannable.setSpan(BulletPointSpan(gapWidthPx, accentColor),/* start index */ 20, /* end index */ spannable.length,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
 txtview.text = spannable

enter image description here

...