@brucebanner

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

Находил несколько примеров по этому поводу, где то со 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. Другого телефона нет для проверки.
  • Вопрос задан
  • 2482 просмотра
Решения вопроса 1
@brucebanner Автор вопроса
Так тоже делал, не помогает. В итоге сделал с помощью TextWatcher`а. Только сказали он ENTER не обрабатывает, искал по "\n". Вот код:
edit.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.toString().contains("\n")) {
                    Log.e("TAG", "Первая строка: Печатается");
                } else {
                    str = s.toString().split("\n");
                    Log.e("TAG", "Первая строка: " + str[0]);
                }

            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

Мне нужно было изъять первую строку. Воот сделал и не обрабатывая ENTER
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ты неправильно обрабатываешь нажатия. View.OnKeyListener#onKey вызывается при нажатии кнопки на физической клавиатуре. Реагирование на нажатия цифр программной клавиатуры, наверное, относятся к исключениям, упомянутым в документации:
Key presses in software keyboards will generally NOT trigger this method, although some may elect to do so in some situations.

Обрабатывать нажатия в EditText нужно так:
// EditText edit = ..;
edit.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if(event.getAction() == KeyEvent.ACTION_DOWN) {
                switch(event.getKeyCode()) {
                    case KeyEvent.KEYCODE_ENTER:
                        // Нажат Enter
                        break;
                }
            }
            return false;
        }
    });

Смотри TextView.OnEditorActionListener#onEditorAction и имей также в виду, что возвращаемое значение (true/false) имеет значение тоже.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы