Ну, я пытаюсь создать форматированный текстовый редактор. У меня есть несколько кнопок для форматирования редактируемого текста (жирный шрифт, курсив, URL-адрес и т. д.).
Я использую Клавиатура Google со всеми включенными параметрами исправления текста (Настройки > Язык и ввод > Клавиатура Google > Исправление текста).
Я делаю следующее:
В своем EditText
я пишу текст.
Я выбираю его и применяю полужирный интервал с SPAN_EXCLUSIVE_EXCLUSIVE
(33) в качестве флажков.
Затем я перемещаю курсор в конец.
Наконец, я добавляю текст в конец текста. Добавленный текст не должен быть полужирным.
Хорошо, вот в чем проблема. Мои жирные флажки изменились... Почему!?
Вот некоторые журналы:
D/ContentUtils: beforeTextChanged: start end span flags
D/ContentUtils: beforeTextChanged: 0 7 ChangeWatcher 8388626
D/ContentUtils: beforeTextChanged: 0 7 ChangeWatcher 6553618
D/ContentUtils: beforeTextChanged: 0 7 TextKeyListener 18
D/ContentUtils: beforeTextChanged: 0 7 SpanController 18
D/ContentUtils: beforeTextChanged: 7 7 START 546
D/ContentUtils: beforeTextChanged: 7 7 END 34
D/ContentUtils: beforeTextChanged: 0 7 SpellCheckSpan 33
D/ContentUtils: beforeTextChanged: 0 7 CustomBoldSpan 33
D/ContentUtils: onTextChaghed
D/ContentUtils: onTextChaghed: 0 8 ChangeWatcher 8392722
D/ContentUtils: onTextChaghed: 0 8 ChangeWatcher 6557714
D/ContentUtils: onTextChaghed: 0 8 TextKeyListener 4114
D/ContentUtils: onTextChaghed: 0 8 SpanController 4114
D/ContentUtils: onTextChaghed: 8 8 START 546
D/ContentUtils: onTextChaghed: 8 8 END 34
D/ContentUtils: onTextChaghed: 0 8 CustomBoldSpan 4129
D/ContentUtils: onTextChaghed: 0 8 UnderlineSpan 289
D/ContentUtils: onTextChaghed: 0 8 ComposingText 289
D/ContentUtils: afterTextChanged
D/ContentUtils: afterTextChanged: 0 8 ChangeWatcher 8392722
D/ContentUtils: afterTextChanged: 0 8 ChangeWatcher 6557714
D/ContentUtils: afterTextChanged: 0 8 TextKeyListener 4114
D/ContentUtils: afterTextChanged: 0 8 SpanController 4114
D/ContentUtils: afterTextChanged: 8 8 START 546
D/ContentUtils: afterTextChanged: 8 8 END 34
D/ContentUtils: afterTextChanged: 0 8 CustomBoldSpan 4129
D/ContentUtils: afterTextChanged: 0 8 UnderlineSpan 289
D/ContentUtils: afterTextChanged: 0 8 ComposingText 289
D/ContentUtils: afterTextChanged: 0 8 SpellCheckSpan 33
Когда я использую другую клавиатуру, все пошло нормально.
Когда я отключил настройки коррекции текста, все пошло нормально. Весь мой диапазон является пользовательским диапазоном и подклассом существующего диапазона Android.
Кажется, Google Keyboard самостоятельно изменяет мои промежутки (вероятно, из-за настроек Show suggestions
).
Как этого избежать?
Может быть, я что-то упускаю из-за флагов промежутков?