在Android中使用TextInputItemText注册按键

在Android中使用TextInputItemText注册按键,android,keylistener,keyevent,Android,Keylistener,Keyevent,我试图捕捉TextInputItemText(来自Material Design)上按下的键,尽管我按下了键盘上的任何键,但我无法进入onKey方法。有人能帮我吗 txtInputApo.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { Log.i("onKey",

我试图捕捉TextInputItemText(来自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;
        }
    });

谢谢

视图。OnKeyListener
主要是为硬件输入而构建的。大多数情况下,最好使用
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);

谢谢我以前试过使用
TextWatcher
,但我还必须捕获回车键,我不知道如何操作。无论如何,我想我可以用这个解决方案。非常感谢。