dispatchKeyEvent

本文详细解析了Android中KeyEvent的分发流程,包括在不同模式下KeyEvent如何被处理,如焦点模式与触摸模式的区别,以及Activity如何重写dispatchKeyEvent方法来拦截事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. case同dispatchTouchEvent


2. ViewGroup中,

a. 如果mFocused不是null,就是处于focus mode,那么沿着top view到focus view的path状,通过View.dispatchKeyShortcutEvent方法派发

ps:dispatchKeyShortcutEvent实现: View中的实现是调用一下onXXX回调即可;ViewGroup中实现是mFocused.dispatchKeyShortcutEvent的递归调用

b. 否则就不再向下pass了。mFocused是null的原因: 1. 当前处于touch mode

// The view contained within this ViewGroup that has or contains focus.
private View mFocused;


3. 在Activity中重写dispatchKeyEvent,并返回true,key event就不会先view tree 派发了。


4. 当MyTextView focused时,key event沿着focus tree pass

D/AndroidTestActivity(11684): dispatchKeyEvent E. action is:0
D/MyLinearLayout(11684): dispatchKeyEvent E. action is:0
D/MyTextView(11684): dispatchKeyEvent E. action is:0
D/AndroidTestActivity(11684): dispatchKeyEvent E. action is:1
D/MyLinearLayout(11684): dispatchKeyEvent E. action is:1
D/MyTextView(11684): dispatchKeyEvent E. action is:1


5. 当没有viewfocused时,

D/AndroidTestActivity(11684): dispatchKeyEvent E. action is:0
D/AndroidTestActivity(11684): dispatchKeyEvent E. action is:1


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值