android的按键 处理,Android中的按键的分发处理【原创】

在Android的开发中,会有要拦截按键的情况,例如拦截返回键,这是一个很简单的操作,只要在Activity中重写onBackPressed()方法,可以将方法体内直接为空实现,如下,或者做一些自己需要在按下返回键要做的操作。

@Override

public void onBackPressed() {

}

另外就是重写onKeyDown()方法

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if(keyCode == KeyEvent.KEYCODE_BACK) {

return true; //屏蔽返回键

}

return super.onKeyDown(keyCode, event);

}

关于按键还有的就是dispatchKeyEvent()方法,因为dispatchKeyEvent和onKeyDown两个方法是有关联的,所以经过查资料我们可以知道,按键的时候不仅是有点击的一个操作,它还伴随着点击后,抬起的操作,当点击的时候,会触发dispatchKeyEvent,然后是onUserInteraction,最后onKeyDown。而按键随后抬起,顺序则是dispatchKeyEvent,onUserInteraction,onKeyUp。

在dispatchKeyEvent中,

@Override

public boolean dispatchKeyEvent(KeyEvent event) {

//Log.e("PPP", event.getKeyCode()+"");

return super.dispatchKeyEvent(event);

}

当出发一次点击的时候Log会打印两次,就是有按下和抬起的操作都会触发。所以我们如果有需要重写dispatchKeyEvent的时候,应该在内部多做一次判断,按下还是抬起,如下,

if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) {

if(event.getAction() == KeyEvent.ACTION_DOWN) {

}

}

最后,dispatchKeyEvent和onKeyDown的返回值问题,如果我们重写了onKeyDown方法,如果想在执行完此方法后不再走系统的onKeyDown方法,则需要返回true,否则要返回false。而dispatchKeyEvent中,如果返回true,则也是代表事件被消费,不会继续传递,false则是可以继续响应onKeyDown方法。

由此,这两个方法比较值得注意的就是按键事件是分按下和抬起两种的,都会相应dispatchKeyEvent,并且这两个方法的返回值决定事件是否被消费掉。

转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/22053.html

75d087ef9a9fb11dc373caaf33adbf7f.png

微信打赏

支付宝打赏

感谢您对作者rick的打赏,我们会更加努力!    如果您想成为作者,请点我

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值