Обновлено для AppCompat v.22. +
Как уже упоминалось на этом форуме , KeyDown
не вызывается при нажатии кнопки KEYCODE_MENU.
Решение состоит в том, чтобы переопределить dispatchKeyEvent
следующим образом:
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int keyCode = event.getKeyCode();
int action = event.getAction();
boolean isDown = action == KeyEvent.ACTION_DOWN;
if (keyCode == KeyEvent.KEYCODE_MENU) {
return isDown ? this.onKeyDown(keyCode, event) : this.onKeyUp(keyCode, event);
}
return super.dispatchKeyEvent(event);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ( keyCode == KeyEvent.KEYCODE_MENU ) {
// do what you want to do here
return true;
}
return super.onKeyDown(keyCode, event);
}
Это работает, пока разработчики Google не выпустят исправление для этого (или, возможно, это не ошибка, и теперь это работает так).