最近因为项目需要,要监听软键盘中的删除键,在网上搜了大部分的说法,用onKeyListener,但是不知道为什么,设置后并没有效果,最后自己通过dispatchKeyEvent实现了,代码如下
@Overridepublic boolean dispatchKeyEvent(KeyEvent event) {if (event.getKeyCode() ==KeyEvent.KEYCODE_DEL){//TODO anything}return super.dispatchKeyEvent(event);}
当然,仅重写上面的代码,程序将会运行两次dispatchKeyEvent方法,原因在于当键盘按下时,首先触发dispatchKeyEvent,然后触发onUserInteraction,再触发onKeyDown方法,如果按下后立马松开,则仅有两步:先触发dispatchKeyEvent,然后触发onUserInteraction,再onKeyUp。所以需要再if语句中再加上event.getAction() != KeyEvent.ACTION_UP,代码如下:
@Overridepublic boolean dispatchKeyEvent(KeyEvent event) {if (event.getKeyCode() == KeyEvent.KEYCODE_DEL && event.getAction() != KeyEvent.ACTION_UP){//TODO }}return super.dispatchKeyEvent(event);}