Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

Не работает обработка нажатия Enter с клавиатуры. Обрабатываются только цифры

#java #android #клавиатура #listener #обработка


Находил несколько примеров по этому поводу, где то со switch где то c if, но суть
не в этом, так и так не работает. Обработчик реагирует только на нажатия цифр. Даже
default в switch`e не реагирует. Что я делаю не так? Вот код

edit.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (KeyEvent.ACTION_DOWN == event.getAction()){
                switch (keyCode){
                    case KeyEvent.KEYCODE_ENTER:
                        Log.e("TAG", "Нажат интер");
                        break;
                    case KeyEvent.KEYCODE_2:
                        Log.e("TAG", "Нажато 2");
                        break;
                    case KeyEvent.KEYCODE_E:
                        Log.e("TAG", "Нажато e");
                        break;
                    default: Log.e("TAG", "Нажато что то");
                }
            }
            return false;
        }
    });


Весь обработчик реагирует только на цифры. Нажимаю буквы или какие нибудь другие
символы default не срабатывает, нажимаю цифры кроме 2 - срабатывает. Нажимаю 2 - работает.
Все клавиши перетыкал "Нажато е" не выходит. И интер тоже. Может дело в модели телефона
не знаю, у меня Lenovo S650 Андроид 4.4.2 Api 19. Другого телефона нет для проверки.
    


Ответы

Ответ 1



OnKeyListener работает криво и в основном только как раз для цифр с кейпада, остальные клавиши не воспринимает. Странно при этом, что ентер тоже не работает. В этом случае лучше использовать TextWatcher, как-то так: myTextView.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.subSequence(count-1,count).equals("нужная кнопка")) ...выполнить нужное действие } @Override public void afterTextChanged(Editable s) { } });

Комментариев нет:

Отправить комментарий