2012-03-26 13 views
10

Zaimplementowałem PopupMenu dla menu wyświetlanego po naciśnięciu elementu na pasku akcji. Zastanawiam się, jakie są alternatywy dla wersji SDK przed 11?Odpowiednia alternatywa dla PopupMenu dla pre-Honeycomb

Możliwe jest użycie czegoś podobnego do menu kontekstowego. Jakie są Twoje myśli?

Moja obecna implementacja polega jednak na załadowaniu nowej czynności z elementami menu.

+1

Wyskoczyłem 'AlertDialog' z' CHOICE_MODE_SINGLE'. – sastraxi

+0

Robię coś podobnego TUTAJ !!! http://stackoverflow.com/questions/16621070/get-context-of-popupmenu-like-contextmenu – toobsco42

Odpowiedz

13

Jak zasugerował @sastraxi, dobrym rozwiązaniem jest użycie AlertDialog z 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(); 

Plik strings.xml.

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

referencyjny: Adding a List

+1

To działa naprawdę dobrze :) –

7

Alternatywnie, można użyć floating context menu.


(3 lata później, właściwie odczytuje że pływające menu kontekstowego działa tylko dla długich kliknięć i pośpiesznie redaguje odpowiedź).

trzeba by zarejestrować swój pogląd na menu kontekstowego, otwórz menu, a następnie wyrejestrować go (tak, że długie kliknie element działania nie wywołać go ponownie):

@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); 
} 

i oczywiście, implementuj onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) zgodnie z dokumentacją połączoną.

Lepszym wyborem byłby, jak OP napisał, użycie AlertDialog w tym konkretnym przypadku, gdybyś chciał wyśrodkować okno dialogowe lub PopupMenu, jeśli chcesz, aby menu było zakotwiczone w elemencie akcji. Menu podręczne może być jednak dziwne, ponieważ będzie ono wyglądało jak menu z przepełnieniem.

+0

OP, myślę, że twoja odpowiedź była lepsza dla twojego przypadku użycia, biorąc pod uwagę, że pływające menu kontekstowe są Wywoływany tylko przy długiej prasie bez hacka, który dodałem powyżej. – ataulm

+0

Bardzo dobrze. Ponownie się przyjąłem. Dzięki za utrzymywanie twoich odpowiedzi :) –