安卓KeyEvent事件分发流程分析

Android里面KeyEvent事件在TV开发时经常都需要接触到,作为交互设备如遥控器、手柄等和Android UI交互时都是通过KeyEvent事件。

下面来讲一下KeyEvent的分发流程。

为了加深理解,建一个demo工程。布局文件如下图所示:



View1、View2、View3是我分别继承RelativeLayout写的三个布局,模拟平时开发时的各种ViewGroup。最顶层的Button模拟平时获取焦点的View。

现在先来讲一下KeyEvent到达Activity后的传递流程。

1、一个完整的KeyEvent由onKeyDown和onKeyUp组成,KeyEvent首先由进入Activity的dispatchKeyEvent进行onKeyDown事件的分发。

2、从最外层ViewGroup进行遍历,直到找到真正拥有焦点的View并回调此事件。

如下图是完整流程




3、如果中间某个ViewGroup满足focus条件,则会回调当前onkeyDown并将不会继续往下子View传递。

如下图,View3主动获取焦点,并且button设为不可获取焦点



4、如果中间某ViewGroup的dispatchKeyEvent方法返回true,则表明此事件被拦截。

如下图,view2拦截了keyEvent事件


5、如果获取焦点的view的回调事件返回true,则表明已经处理,Avtivity的此回调事件将不会回调

如下图,button的onKeyDown执行,而activity的onKeyDown不会执行


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值