2012-03-26 9 views
10

Ich habe PopupMenu für ein Menü implementiert, das nach dem Drücken eines Elements auf der ActionBar angezeigt wird. Ich frage mich, welche Alternativen es für SDK-Versionen vor 11 gibt?Entsprechende Alternative zu PopupMenu für Pre-Honeycomb

Möglicherweise etwas verwenden, das einem Kontextmenü ähnlich ist. Was sind deine Gedanken?

Meine aktuelle Implementierung ist, eine neue Aktivität mit den Menüpunkten zu laden.

+1

Ich würde einen 'AlertDialog' mit' CHOICE_MODE_SINGLE' aufrufen. – sastraxi

+0

Ich mache etwas ähnliches hier !!! http://stackoverflow.com/questions/16621070/get-context-of-popupmenu-like-contextmenu – toobsco42

Antwort

13

Wie von @sastraxi vorgeschlagen, verwendet eine gute Lösung einen AlertDialog mit 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(); 

Und die Datei strings.xml.

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

Referenz: Adding a List

+1

Das funktioniert wirklich gut :) –

7

Alternativ können Sie eine floating context menu verwenden.

(3 Jahre später, liest eigentlich, dass Floating-Kontextmenü nur für lange Klicks funktioniert und hastig bearbeitet Antwort).

Sie benötigen würde Ihre Ansicht für das Kontextmenü zu registrieren, um das Menü öffnen, dann austragen es (so, dass die Lang klickt auf das Aktionselement hat es nicht wieder auslösen):

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

und Natürlich implementieren Sie gemäß der Dokumentation verknüpft. Die bessere Wahl wäre, wie OP geschrieben hat, einen AlertDialog in diesem speziellen Fall zu verwenden, wenn Sie einen zentrierten Dialog wünschen, oder eine PopupMenu, wenn Sie möchten, dass das Menü am Aktionselement verankert wird. Das Popup-Menü könnte jedoch seltsam sein, weil es sich wie ein Überlaufmenü anfühlt.

+0

OP, ich denke, Ihre Antwort war besser für Ihren Anwendungsfall, angesichts der fließenden Kontextmenüs sind nur ausgelöst bei langem Drücken ohne den oben hinzugefügten Hack. – ataulm

+0

Sehr gut. Ich habe mich wieder akzeptiert. Danke für deine Antworten :) –

Verwandte Themen