Реализация многофункционального текстового редактора в Android? - PullRequest
53 голосов
/ 26 ноября 2010

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

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

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

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

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

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

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

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

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

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

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

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


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

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

Спасибо!

-Tony


( EDIT )

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

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

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

Ответы [ 6 ]

12 голосов
/ 02 июня 2015

Я только что опубликовал свой компонент текстового редактора под лицензией Apache 2.0:

https://github.com/1gravity/Android-RTEditor

enter image description here

4 голосов
/ 15 января 2011

Я бы, вероятно, расширил бы и EditText и TableLayout или, по крайней мере, использовал бы большую часть их источника , если бы было достаточно больших изменений, которые мне нужно было сделать.

3 голосов
/ 15 января 2011

Можете ли вы сделать следующее:

  1. Вручную удерживайте содержимое в EditText как собственную модель (т. Е. Разделяя и поддерживая документ содержимого и атрибуты представления как отдельные объекты).
  2. Переопределите рендеринг (или метод рисования) для создания пользовательского макета в частях документа содержимого (части вашей модели), которые обрабатывают нетекстовые символы (например, маркеры с определенным атрибутом).

Мне кажется, что если вам нужно разобраться с макетом, вам лучше написать его с нуля самостоятельно. Из того, что я помню, текст Edit (и текстовый редактор richt) отлично подходит для всего, где у вас есть чистый текст.

2 голосов
/ 16 декабря 2011

Существует открытый текстовый редактор EditText с открытым исходным кодом, который называется android-richtexteditor , но код был необъяснимым образом удален в r5.Код все еще присутствует в r4 ;просто используйте SVN, чтобы проверить r4 или ранее, чтобы получить к нему доступ.Код, по-видимому, поддерживает курсив, подчеркивание, палитру цветов, размер текста и т. Д.

Также даны ответы на следующие вопросы: 1 , 2

0 голосов
/ 09 сентября 2013

Отметьте это с открытым исходным кодом Wordpress mobile приложение для Android. У него очень многообещающее Richtexteditor на основе Edittext.

Вы можете скачать исходный код с здесь

Спасибо

0 голосов
/ 28 мая 2012

Расширение из EditText является лучшим выбором для вас, он поддерживает CharacterSpan и ParagraphSpan.

См. Мое приложение в Google Play: https://play.google.com/store/apps/details?id=com.hly.notes

...