[Отправка нового ответа, поскольку я не могу комментировать ответ Йозефа.]
Фильтр ввода работает нормально, но в нем есть небольшая ошибка: ввод текста над выделением удалит весь текст.
Например, скажем, у вас есть текст "foo"
в EditText
. Если вы выделите все это (например, дважды щелкнув по нему) и напечатаете 'a'
, текст исчезнет. Это потому, что InputFilter
будет называться:
filter("a", 0, 1, "foo", 0, 3);
В этом случае предложенный входной фильтр вернет пустую строку (потому что src.length() < 1
- это false
), что объясняет отсутствующий текст.
Решение состоит в том, чтобы просто вернуть dst.subSequence(dstart, dend)
в функции фильтра. Это будет хорошо работать даже для удалений.