问题::当用户按下其设备上的主屏幕或菜单键时,则不会触发dispatchKeyEvent(),但是当用户按下其设备上的后退按钮时,就会调用dispatchKeyEvent()方法。
这是我的代码片段:
viewHolder = new RelativeLayout(context) {
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
Log.e(TAG, "dispatchKeyEvent: ");
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == 0) {
Log.e(TAG, "dispatchKeyEvent: KEYCODE_BACK");
if (viewHolder != null) {
if (viewHolder.getWindowToken() != null) {
mWindowManager.removeView(viewHolder);
mOverlayView.setVisibility(VISIBLE);
} else {
return super.dispatchKeyEvent(event);
}
}
}
if (event.getKeyCode() == KeyEvent.KEYCODE_HOME) {
Log.e(TAG, "dispatchKeyEvent: KEYCODE_HOME");
if (viewHolder != null) {
if (viewHolder.getWindowToken() != null) {
mWindowManager.removeView(viewHolder);
mOverlayView.setVisibility(VISIBLE);
} else {
return super.dispatchKeyEvent(event);
}
}
}
if (event.getKeyCode() == KeyEvent.KEYCODE_MENU) {
Log.e(TAG, "dispatchKeyEvent: KEYCODE_MENU");
if (viewHolder != null) {
if (viewHolder.getWindowToken() != null) {
mWindowManager.removeView(viewHolder);
mOverlayView.setVisibility(VISIBLE);
} else {
return super.dispatchKeyEvent(event);
}
}
}
return super.dispatchKeyEvent(event);
}
};
此处的viewHolder是相对布局,它已添加到窗口管理器中。
现在,我想在用户按下设备上的主页,菜单和返回键时从windowmanager中删除视图
当用户按下后退按钮时,此方法会很好地触发,并且还从窗口管理器中删除了相对布局,但是当按下home键时,该设备上的菜单键不被调用