按键事件分发机制相关
一.事件分发
Android事件分发流程 Activity -> ViewGroup -> View
1个点击事件发生后,事件先传到Activity、再传到ViewGroup、最终再传到 View
一个点击事件产生后,
按键按下的事件会按顺序传递从Activity开始
按键抬起的事件也会按顺序从Activity开始传递
dispatchKeyEvent事件分发顺序
AppCompatActivity -->ComponentActivity–>Activity–>Window–>DecorView–>ViewGroup–>View
在事件分发的过程中,但凡有一处进行了事件处理,那么事件将停止分发,结束该事件
二. 处理事件
按键事件处理时
reture true, 不会继续向下传递
return false,事件不会向下传递,会交由上层处理
return super.对应事件, 事件会继续向下传递
1.Activity中处理
1)复写dispatchkeyEvent
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
// Let support action bars open menus in response to the menu key prioritized over
// the window handling it
final int keyCode = event.getKeyCode();
final ActionBar actionBar = getSupportActionBar();
if (keyCode == KeyEvent.KEYCODE_MENU
&& actionBar != null && actionBar.onMenuKeyEvent(event)) {
return true;
}
return super.dispatchKeyEvent(event);
}
- 复写onKeyDown
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (performMenuItemShortcut(event)) {
return true;
}
return super.onKeyDown(keyCode, event);
}
- 复写onKeyUp
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (getApplicationInfo().targetSdkVersion
>= Build