Aggiornato per AppCompat V.22 +
Come menzionato in questo forum, KeyDown
non viene chiamato per il pulsante KEYCODE_MENU premuto.
La soluzione è quella di ignorare dispatchKeyEvent
a questo modo:
@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);
}
Funziona fino a quando gli sviluppatori di Google rilasciare una correzione per questo (o forse non è un bug e funziona in questo modo da ora in poi).
Grazie - questo è quello che stavo cercando. E non ti preoccupare - non sto cambiando l'esperienza utente, ma voglio fare alcune azioni personalizzate prima che il menu sia effettivamente renderizzato. – Mannaz
yanchenko rispondere dovrebbe essere accettato. –
yanchenko ha una soluzione migliore. – katzenhut