actualizada para AppCompat v.22 +
Como mencionado en este forum, KeyDown
no se llama al botón KEYCODE_MENU presionado.
la solución es anular dispatchKeyEvent
de esta manera:
@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);
}
Funciona hasta que los desarrolladores de Google lanzan una solución para este (o tal vez no es un error y funciona de esta manera a partir de ahora).
Gracias - esto es lo que estaba buscando. Y no te preocupes: no voy a cambiar la experiencia del usuario, pero quiero hacer algunas acciones personalizadas antes de que el menú realmente se represente. – Mannaz
yanchenko answert debe ser el aceptado. –
yanchenko tiene una mejor solución. – katzenhut