setKeyListener переопределит setInputType и изменит клавиатуру - PullRequest
3 голосов
/ 14 апреля 2020

Привет всем У меня проблема между двумя устройствами.

На практике, используя InputType и KeyListener, я манипулирую EditText, чтобы заставить его получать запятые и цифры с клавиатуры цифр c (для дополнительной справки проверьте мои предыдущие вопрос ).

Используя следующий код, я могу сделать что-то подобное:

    editText.setInputType(InputType.TYPE_CLASS_NUMBER + InputType.TYPE_NUMBER_FLAG_DECIMAL);
    editText.setKeyListener(DigitsKeyListener.getInstance("0123456789,"));

enter image description here

К сожалению, это не работает на некоторых устройствах, таких как Asus ZenPad 8.0 или на некоторых Samsung.

Только запятая цифра c отображается без запятой, и поэтому пользователь не может щелкнуть и использовать ее, что важно обратите внимание, что комментирование строки кода ниже показывает мне правильно блокнот с доступной запятой. Но при этом они больше не могут использовать несколько запятых в одном поиске.

    editText.setKeyListener(DigitsKeyListener.getInstance("0123456789,"));

Без KeyListener

image

С KeyListener

image

Я также прочитал документацию android об этом и там написано ( source ):

Интерфейс для преобразования событий текстовых клавиш в операции редактирования в редактируемом классе. Обратите внимание, что в большинстве случаев этот интерфейс был заменен общими программными методами ввода, как определено InputMethod; его следует использовать только в тех случаях, когда приложение имеет собственную экранную клавиатуру, а также хочет обрабатывать события жесткой клавиатуры, чтобы соответствовать ей.

Для запуска методов в этом режиме нажатия клавиш не требуются. слушатель, и на самом деле не рекомендуется делать это. Клавиатура android по умолчанию не будет вызывать их для какой-либо клавиши для любого приложения, нацеленного на Jelly Bean или более позднюю версию, и будет доставлять ее только для некоторых нажатий клавиш для приложений, нацеленных на Ice Cream Sandwich или более раннюю версию.

Так в принципе для старых версий android это не работает? Как я могу повторить вышеупомянутое поведение? (В основном, как я могу использовать клавиатуру цифри c с неограниченным количеством запятых)

Для более подробной информации просто прокомментируйте, я с удовольствием отвечу и добавлю больше информации!

Спасибо заранее, Джакомо.

1 Ответ

0 голосов
/ 20 апреля 2020

все зависит от того, для чего вы используете EditText (будет ли это tragi c, если буквы также были видны?), Вы можете просто использовать тип ввода по умолчанию и просто установить фильтр для него, чтобы он принимал только числа и один «символ» (то есть запятая) при нажатии клавиш. Вот ссылка , которая позволяет вам сделать это. по общему признанию это не будет выглядеть симпатичным, но это предоставит Вашим пользователям надежный опыт, который будет работать на всех устройствах.

альтернатива - создать собственную клавиатуру, как указано выше

...