您的位置:首页 > 其它

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

2012-10-14 21:56 453 查看

键盘事件只会发送到当前获得焦点的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键事件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: