2016-10-16 1 views
0

Я пытаюсь применить ForegroundColorSpan с флажком Spannable.EXCLUSIVE_INCLUSIVE при использовании TextWatcher в определенном диапазоне индексов.Потеря пробелов в EditText с помощью Google Keyboard в качестве входных данных

С помощью ввода-вывода моего устройства (клавиатура Samsung) проблем нет, и все работает так, как ожидалось, однако при использовании Google Keyboard в качестве входных данных это другая история.

От моей отладки я обнаружил, что Google Keyboard помещает целые слова, даже если вы меняете один символ - я думаю, это из-за функции коррекции слова. В результате, если Span был применен в какой-то момент слова (даже в конце), и пользователь вводит больше текста, диапазон исчезает. Единственное исключение - это когда диапазон применяется к последнему символу слова, а пользователь вводит пробел («заканчивает» слово).

Обходной путь, который я нашел, - это просто проверить, является ли вход целым словом, и всякий раз, когда он есть - снова примените Span. Хотя это действительно работает, это не очень хорошее решение, так как мне нужно каждый раз настраивать каретку, и тот факт, что мне нужно повторно наложить спин, когда этого можно избежать (поэтому я использую флаг Spannable.EXCLUSIVE_INCLUSIVE).

P.S. Я пробовал другие флаги, такие как INCLUSIVE_INCLUSIVE, и он сортируется, но он применяет пролет назад как-хорошо, в результате чего Span применяется ко всему слову, а не к индексу, который я указал.

Есть ли лучшее решение этой проблемы?

ответ

1

Итак, я нашел другое решение - отключение ввода ввода с клавиатуры. Это предотвращает ввод целого слова и вместо этого просто один символ каждый раз.

Для этого мне пришлось добавить флаг TextNoSuggestions в атрибут inputType EditText.

android:inputType="textNoSuggestions|<other_flags>" 

я нашел больше информации об этом inputType здесь: Turn off autosuggest for EditText?

 Смежные вопросы

  • Нет связанных вопросов^_^