2012-06-26 13 views
5

Ho un'attività principale che non utilizza il menu delle opzioni. Devo implementare questo comportamento: 1. Quando viene premuto il pulsante Menu Android, viene visualizzato un popup 2. Quando il pulsante Menu Android viene nuovamente premuto, il popup viene eliminato.Intercettazione del pulsante Menu Android in una finestra popup

So come fare # 1 sovrascrivendo onKeyDown() nell'attività principale ma non so come fare # 2. Quando viene mostrato il popup, il onKeyDown() dell'attività principale non viene più attivato.

Come si acquisisce il pulsante Menu Android quando l'attività principale ha un popup aperto? (nel mio caso, il popup è una PopupWindow con una visualizzazione gonfiata).

BTW, ho cercato di impostare un listener per i tasti sulla vista principale del popup, ma non viene attivato

mTopView.setOnKeyListener(new View.OnKeyListener() {   
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      LogUtil.debug("*** Key: %d", keyCode); 
      return false; 
     } 
    }); 
+1

Se fossi in me, farei il "pop-up" nella propria attività, in questo modo si può fare esattamente come nella MainActivity. Basta chiamare finish() quando si preme il menu nell'attività pop-up. – FoamyGuy

+0

Grazie. Ho un sacco di codice investito nella soluzione popup (ha bisogno di popup in una posizione specifica e forma in relazione a una vista di ancoraggio). Se non troverò il modo di farlo funzionare cercherò di avvicinarmi all'attività. – user1139880

risposta

14

Rispondendo alla mia domanda. Chiamare setFocusableInTouchMode() sulla vista PopupWindow fa il trucco e fa funzionare l'ascoltatore.

PopupMenu popupMenu = ... 
... 
popupWindow.getContentView().setFocusableInTouchMode(true); 
popupMenu.getContentView().setOnKeyListener(new View.OnKeyListener() {   
    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_MENU && 
       event.getRepeatCount() == 0 && 
       event.getAction() == KeyEvent.ACTION_DOWN) { 
      // ... payload action here. e.g. popupMenu.dismiss(); 
      return true; 
     }     
     return false; 
    } 
}); 
0

provare questo

if (keyCode == KeyEvent.KEYCODE_MENU) { 
     // Do Stuff 
    }