焦点在子Activity的listView时ActivityGroup无法响应Menu键的问题

键盘事件只会发送到当前获得焦点的View,这个KeyEvent只能被最上层获得焦点窗口的activity和view得到。一般来说这些事件会从上倒下去寻找合适的接受组件,ViewGroup的一个childView的onKeyDown()方法return true,那么表示该方法消费了此次事件,此时不会再传递到ViewGroup的onKeyDown()方法,如果onKeyDown()方法return false,那么表示该方法并未处理完全,该事件仍然需要以某种方式传递下去继续等待处理,这时传递到ActivityGroup的onKeyDown()方法。但是KeyEvent.KEYCODE_MENU不会传递到ActivityGroup去。 一个ActivityGroup的键盘事件处理 按下按键时执行 首先执行ActivityGroup dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_DOWN) 然后执行ActivityGroup onUserInteraction 最后执行ActivityGroup onKeyDown 松开按键时执行 首先执行ActivityGroup dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_UP) 然后执行ActivityGroup onUserInteraction 最后执行ActivityGroup onKeyDown   如果childView是listView,按上下键选择列表时的事件执行流程 按下键时 首先执行ActivityGroup dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_DOWN) 然后执行ActivityGroup onUserInteraction 然后执行childActivity dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_DOWN) 然后执行childActivity onUserInteraction 松开键时 首先执行ActivityGroup dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_UP) 然后执行ActivityGroup onUserInteraction 然后执行childActivity dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_UP) 然后执行childActivity onUserInteraction 然后执行childActivity onKeyUp 最后执行ActivityGroup onKeyUp 如果焦点在childView的listView上,按Menu键的事件 首先执行ActivityGroup dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_DOWN) 然后执行ActivityGroup onUserInteraction 然后执行childActivity dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_DOWN) 然后执行childActivity onUserInteraction 最后执行childActivity onKeyDown 松开键时 首先执行ActivityGroup dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_UP) 然后执行ActivityGroup onUserInteraction 然后执行childActivity dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_UP) 然后执行childActivity onUserInteraction 然后执行childActivity onKeyUp 如果焦点在childView的listView上,按Back键的事件 首先执行ActivityGroup dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_DOWN) 然后执行ActivityGroup onUserInteraction 然后执行childActivity dispatchKeyEvent (event.getAction()==KeyEvent.ACTION_DOWN) 然后执行childActivity onUserInteraction 然后执行childActivity onKeyDown 最后执行ActivityGroup onKeyDown Activity.dispatchKeyEvent(MotionEvent) - 这允许你的活动可以在分发给窗口之前捕获所有的键盘事件。 由上面可知,当焦点在childView的listView上时,没有执行ActivityGroup onKeyDown,而有执行ActivityGroup的dispatchKeyEvent,因此可以在ActivityGroup的dispatchKeyEvent来捕获childActivity的Menu键事件。

转载于:https://my.oschina.net/zchuanzhao/blog/512627

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值