2013-11-03 10 views
27

Ich möchte Menühandler zu meinem Projekt hinzufügen. Ich lese auch http://developer.android.com/guide/topics/ui/menus.html, es ist sehr einfach, aber das Symbol wird nicht angezeigt. Ich bin sehr verwirrt. Ich habe sogar einen Menüpunkt programmgesteuert hinzugefügt.Symbol im Menü nicht in Android angezeigt

Mein Code ist:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    menu.add(0, 0, 0, "Quit").setIcon(R.drawable.ic_launcher); 
    getMenuInflater().inflate(R.layout.menu, menu); 
    return true; 
} 

und in xml:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- Single menu item 
     Set id, icon and Title for each menu item 
    --> 
    <item android:id="@+id/menu_bookmark" 
      android:icon="@drawable/update" 
      android:title="@string/Update" /> 

</menu> 
+0

welche Android-Version Ihr Gerät läuft? – Hardik

+0

4.1.2, aber ich laufe http: //www.androidhive.info/2011/09/how-to-create-android-menüs/und es hat gut funktioniert –

+1

das ist definitiv eines der frustrierendsten Probleme mit Android. Ich habe keine Ahnung, warum es nicht funktioniert. Ihre Dokumentation macht genau das, was Sie tun, aber es funktioniert nicht. –

Antwort

29

Wenn Sie Ihren Code ausführen auf Android 3.0+, die Symbole im Menü nicht durch Design gezeigt. Dies ist eine Designentscheidung von Google.

Sie können mehr darüber in this auf Android-Entwickler Blog lesen.

+0

aber ich laufe http://www.androidhive.info/2011/09/how-to-create-android-menus/ und es hat funktioniert, –

+0

Verlängert Ihre Aktivität 'ActionBarActivity' wenn es nicht funktioniert? – Szymon

+0

Nein, Aktivität erweitern –

6

Sie können Ihrer XML-Datei das Attribut android:showAsAction="always" in Ihrem Elementelement hinzufügen. Dann wird die entsprechende Menüoption als Symbol in der Aktionsleiste angezeigt.

Beachten Sie, dass es statt des Textes im Menü sein wird.

Weitere Informationen finden Sie unter here unter android: showAsAction.

27

Egal, welche Design-Entscheidungen, wo durch das System vorgenommen hat, können Sie dies mit der in the top upvoted answer to this question

-Code unten auf Vollständigkeit bereitgestellte Lösung umgehen. Getestet arbeiten android.support.v7.app.ActionBarActivity

@Override 
public boolean onMenuOpened(int featureId, Menu menu) 
{ 
    if(featureId == Window.FEATURE_ACTION_BAR && menu != null){ 
     if(menu.getClass().getSimpleName().equals("MenuBuilder")){ 
      try{ 
       Method m = menu.getClass().getDeclaredMethod(
        "setOptionalIconsVisible", Boolean.TYPE); 
       m.setAccessible(true); 
       m.invoke(menu, true); 
      } 
      catch(NoSuchMethodException e){ 
       Log.e(TAG, "onMenuOpened", e); 
      } 
      catch(Exception e){ 
       throw new RuntimeException(e); 
      } 
     } 
    } 
    return super.onMenuOpened(featureId, menu); 
} 
+1

gearbeitet habe Diese FAST funktionierte für mich. Aus Gründen, die ich nicht verstehe, war der Wert featureId für mich 0. Ich ersetzte die erste if-Anweisung mit "if (featureId == Window.FEATURE_OPTIONS_PANEL && Menü! = Null) {" und es hat funktioniert. Obwohl ich nicht sicher bin, dass "FEATURE_OPTION_PANEL" die korrekte Bedeutung der 0 ist, die meine App bekommt. –

+0

Nun, die meisten Java-Workarounds für Androids berüchtigte eingebettete "Best-Practices" (a.k.a ziehen einen Apple auf der Entwickler-API) verlassen sich entweder auf Java-Reflektion oder direktes Quell-Copypasta zum Projekt (was bei weitem weniger ansprechend und doch sicherer ist). Ein typisches Beispiel dafür ist, dass die ehemaligen Menschen das Bedürfnis haben, die Veränderung zu überdenken. In diesem Fall wurde entschieden, dass die Anpassungen spezifisch für ActionBar-Aufrufe waren, aber es könnte andere geben, wie zum Beispiel deins, je nach API-Level und was nicht. – leRobot

+0

Vielen Dank dafür !!! –

-1
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    menu.add(0, 0, 0, "androidDemo").setIcon(R.drawable.ic_launcher); 
    getMenuInflater().inflate(R.layout.menu, menu); 
    return true; 
} 

und in xml:

<item android:id="@+id/menuUpdate" 
    android:icon="@drawable/update_icon" 
    android:title="@string/Update" 
    android:showAsAction="always"/> 

2

alle, die vergessen, tun Sie diesen Schritt. fügen Sie app:showsAsAction="always" zu Ihrem Artikel hinzu. Wenn Sie android:showsAsAction="always" verwenden, erhalten Sie keine Lösung. Versuchen Sie, das App-Attribut zu Ihrem Artikel hinzuzufügen.

+0

Dies macht es einfach auf der tatsächlichen Leiste angezeigt (nicht im Menü) als Aktionselement. – Fattie

18

Alte Frage, aber hoffe, es wird jemandem helfen.

den folgenden Code verwenden:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 

<item android:id="@+id/menu_item_share" 
    android:title="Share" 
    app:showAsAction="always" 
    android:icon="@drawable/share" /></menu> 

note i app:showAsAction anstelle von android:showAsAction

+0

Das muss ich tun. Vielen Dank. – hellaandrew

12

Nach Lange versuche ich unten Lösung gefunden, die anderen helfen könnte es Zeit zu sparen. Grundsätzlich, die Lösung von "lbarbosa", ich danke ihm herzlich.

dies auf die bisherigen Antworten basieren versucht, und es funktioniert gut, zumindest mit neueren Versionen der Support-Bibliothek (25.1):

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main, menu); 

    if(menu instanceof MenuBuilder){ 
     MenuBuilder m = (MenuBuilder) menu; 
     m.setOptionalIconsVisible(true); 
    } 

    return true; 
} 
Verwandte Themen