Регистрация нажатых клавиш с помощью TextInputEditText в Android

#android #keylistener #keyevent

#Android #keylistener #keyevent

Вопрос:

Я пытаюсь определить, какая клавиша нажата в TextInputEditText (из Material Design), и хотя я нажимаю любую клавишу с клавиатуры, мне не удается перейти в метод OnKey. Может ли кто-нибудь мне помочь?

 txtInputApo.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            Log.i("onKey","true");
            if(event.getAction() == KeyEvent.ACTION_UP){
                switch (keyCode){
                    case KeyEvent.KEYCODE_SPACE:
                        String Espaces = txtInputApo.getText().toString().replaceAll(" ", "");
                        txtInputApo.setText(Espaces);
                        txtInputApo.setSelection(Espaces.length());
                        break;

                }
            }

            return false;
        }
    });
  

Спасибо!

Ответ №1:

View.OnKeyListener в основном был создан для аппаратного ввода. В большинстве случаев вместо этого лучше использовать a TextWatcher для такого сценария (мониторинг и изменение пользовательского ввода).

Вы можете сделать что-то подобное, чтобы достичь желаемого результата с помощью TextWatcher :

     TextWatcher watcher = 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) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            String editableString = s.toString();
            if (editableString.contains(" ")) {
                final String spaceFreeString = editableString.replaceAll(" ", "");
                txtInputApo.setText(spaceFreeString);
                txtInputApo.setSelection(spaceFreeString.length());
            }
        }
    };
    txtInputApo.addTextChangedListener(watcher);
  

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

1. Спасибо! Я пробовал TextWatcher раньше, но мне также нужно захватить клавишу ввода, и я не знал, как это сделать. В любом случае, я думаю, что смогу справиться с этим решением. Спасибо!