在EditText上获取关键事件

Flá*_*ria 22 android listener android-edittext

如何在EditText上键入时按下后退键的事件?当显示虚拟键盘并且用户按下时,它将被隐藏.我想处理此事件,但在EditText中设置OnKeyListener没有帮助.

Flá*_*ria 71

谢谢Reno.它似乎可行,但我设法以不同的方式解决它.

我重写了EditText的onKeyPreIme(int keyCode,KeyEvent事件).此方法拦截IME上的按键.= d

public boolean onKeyPreIme(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && 
        event.getAction() == KeyEvent.ACTION_UP) {
            // do your stuff
            return false;
    }
    return super.dispatchKeyEvent(event);
}
Run Code Online (Sandbox Code Playgroud)


Ren*_*eno 15

这不起作用?

edText.setOnKeyListener(new OnKeyListener()
    {
        public boolean onKey(View v, int keyCode, KeyEvent event)
        {
            if (event.getAction() == KeyEvent.ACTION_DOWN)
            {
                //check if the right key was pressed
                if (keyCode == KeyEvent.KEYCODE_BACK)
                {

                    return true;
                }
            }
            return false;
        }
    });
Run Code Online (Sandbox Code Playgroud)

编辑:

好吧这令人沮丧.Android在关闭qwerty键盘时不发送IME事件.这是 我遇到的唯一解决方法.我希望它对你也有用.


Rub*_*Yoo 8

我不知道为什么会出现这种情况,但如果您只是纯粹覆盖自定义EditText上的onKeyPreIme,则OnKeyListener可以正常工作.

customEditText.setOnKeyListener((v, keyCode, event) -> {
            if(event.getAction() == KeyEvent.ACTION_DOWN) {
                switch (keyCode) {
                    case KeyEvent.KEYCODE_BACK:
                        getPresenter().onBackPressed();
                        break;
                }
            }
            return false;
        }); 
Run Code Online (Sandbox Code Playgroud)
@Override
    public boolean onKeyPreIme(int keyCode, KeyEvent event) {
        return super.dispatchKeyEvent(event);
    }
Run Code Online (Sandbox Code Playgroud)