Реализация редактора форматированного текста в Android?

Мне интересно, есть ли какие-нибудь хорошие варианты для реализации редактора форматированного текста в Android. Обратите внимание, я говорю о редакторе форматированного текста, который можно использовать в приложении Android, а не о редакторе, встроенном в веб-страницу с использованием HTML и Javascript.

Мои требования:

  • Базовое форматирование (цвет, шрифты, выделение , полужирный, курсив, подчеркивание и т. д. )
  • Гиперссылки
  • Встроенные изображения
  • Маркированные и нумерованные списки
  • Встроенная таблица (редактируется только содержимое внутри ячейки, но не структура таблицы)

Как видите, это довольно много что-то очень похожее на типичный элемент управления RichEdit в Windows.

Вот некоторые усилия (исследование и создание прототипов), которые я сделал до сих пор:

Использование WebView

Я попытался использовать элемент управления WebView для загрузки фрагмента HTML один . Контент становится редактируемым, и, поскольку это HTML, я полагаю, он может удовлетворить большинство моих требований. Но у него есть несколько проблем:

  • (смертельно опасно) Нет текста курсора. Пользователь не будет знать, куда будут вставлены его / ее набранные символы.
  • Экранная виртуальная клавиатура не отображается по умолчанию. Существует уловка, заключающаяся в том, что пользователь должен долго нажимать кнопку «Меню», чтобы вызвать клавиатуру. Но я думаю, что это очень плохой пользовательский опыт. Кроме того, расположение экрана не переставлено должным образом, и точка вставки текста иногда будет закрыта клавиатурой.

Использование EditText

Я пробовал использовать элемент управления EditText. Кажется, он поддерживает некоторый уровень редактирования форматированного текста (цвет, шрифты, полужирный, курсив, подчеркивание, встроенные изображения, маркированные списки). Но я все еще не могу понять, как я могу реализовать следующие требования:

  • Контроль внешнего вида символа маркера (точка, круг, тире, стрелка, звезда и т. Д.)
  • Нумерованный список (1., 2., 3. и т. Д.)
  • Таблица

Кстати, я видел, что существует несколько классов * Span, но я не уверен, могут ли они помочь ... И http: // developer .android.com не предоставляет много полезной информации о них.


Итак, Могу ли я расширить EditText и добавить новые функции? Или надо делать что-то с нуля - расширять View и реализовывать все самостоятельно? Что касается более позднего варианта (расширение представления), я даже не знаю, как показать текстовую вставку и мигать ею, не говоря уже о перемещении каретки при вводе пользователем.

Я в отчаянии ... Есть подсказки?

Спасибо!

-Tony


( EDIT )

После некоторого дальнейшего расследования, похоже, что расширение EditText было бы моим лучшим выбором. Я каким-то образом придумал, как использовать эти классы Span, и полагаю, что смогу выполнять большинство трюков, используя (расширяя) их.

Например, расширение BulletSpan и переопределение drawLeadingMargin должно дать мне контроль над внешним видом маркеров. . Расширение LeadingMarginSpan должно помочь мне в нумерованном списке.

Что касается таблицы, Мой первоначальный план - расширить LineBackgroundSpan и нарисовать все границы таблицы в переопределении drawBackground. Однако мне все еще нужно выяснить, как разместить весь текст в ячейках таблицы и правильно обрабатывать перемещение и выделение курсора. Предложения?

55
задан Swati Garg 15 October 2018 в 22:40
поделиться