2012-03-26 16 views
10

Ho implementato PopupMenu per un menu che viene visualizzato dopo aver premuto un elemento su ActionBar. Mi chiedo quali alternative ci sono per le versioni dell'SDK prima delle 11?Appropriata alternativa a PopupMenu per pre-Honeycomb

Possibilmente utilizzare qualcosa simile a un menu di scelta rapida. Quali sono i tuoi pensieri?

La mia attuale implementazione, però, è di caricare una nuova attività con le voci di menu.

+1

Vorrei aprire un 'AlertDialog' con' CHOICE_MODE_SINGLE'. – sastraxi

+0

Sto facendo qualcosa di simile QUI !!! http://stackoverflow.com/questions/16621070/get-context-of-popupmenu-like-contextmenu – toobsco42

risposta

13

Come suggerito da @sastraxi, una buona soluzione è utilizzare uncon CHOICE_MODE_SINGLE.

AlertDialog.Builder builder = new AlertDialog.Builder(MyAndroidAppActivity.this); 
builder.setTitle("Pick color"); 
builder.setItems(R.array.colors, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
      // The 'which' argument contains the index position 
      // of the selected item 
     } 
}); 
builder.setInverseBackgroundForced(true); 
builder.create(); 
builder.show(); 

E il file strings.xml.

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string-array name="colors"> 
     <item >blue</item> 
     <item >white</item> 
    </string-array> 
</resources> 

Riferimento: Adding a List

+1

Funziona molto bene :) –

7

In alternativa, è possibile utilizzare un floating context menu.


(3 anni più tardi, si legge in realtà che il menu contestuale galleggiante funziona solo per lunghi clic e modifica frettolosamente risposta).

Avresti bisogno di registrare la vista per il menu di scelta rapida, aprire il menu, quindi annullare la registrazione (in modo che lungo-clic sul elemento di azione non ha innescare di nuovo):

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId() == R.id.my_menu_item) { 
     View view = item.getActionView(); 
     registerForContextMenu(view); 
     openContextMenu(view); 
     unregisterForContextMenu(view); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

e naturalmente, attuare onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) come da documentazione collegata.

La scelta migliore sarebbe, come OP ha scritto, di utilizzare un AlertDialog in questo caso particolare se si desidera una finestra di dialogo centrata, o un PopupMenu se si desidera che il menu sia ancorato all'elemento azione. Il menu popup potrebbe essere strano, perché si sentirà come un menu di overflow.

+0

OP, penso che la tua risposta sia stata migliore per il tuo caso d'uso, dato che i menu contestuali fluttuanti sono attivato solo su una lunga pressione senza l'hack che ho aggiunto sopra. – ataulm

+0

Molto bene. Ho riaccettato a me stesso. Grazie per il mantenimento delle tue risposte :) –