2012-08-16 14 views
23

Ich möchte neben dem Titel des Menüs im Überlauf-Dropdown-Menü ein Symbol anzeigen.Wie werden Symbole im ActionBar-Überlaufmenü angezeigt?

Ist das möglich?

+0

mögliche Duplikate von [Wie Symbole im Überlaufmenü in ActionBar angezeigt werden] (http://StackOverflow.com/questions/18374183/how-to-show-icon-in-overflow-menu-in-actionbar) – user1931751

+0

Refer @Kevin Grants Antwort http://stackoverflow.com/questions/18374183/how-to-show-icons-in-o-flow-menu-in-actionbar – MashukKhan

Antwort

1

Dies ist nicht möglich (zumindest in HC - und ich entwickle auf API 16 und bekomme auch keine Symbole). Google will das nicht.

Für ein bisschen Diskussion zum Thema finden Sie ähnliche Antwort hier:

Als einer der Kommentare schlägt vor, wenn Sie die Symbole benötigen, sollten Sie eine Drop-Down-Menü, anstatt das Überlaufmenü.

2

Hate Antworten wie diese, aber ich bin nicht gut genug, um eine bessere Antwort zu geben.

Das Symbol für die Überlaufelemente für das Menü ist die Zeile submenu2 "subMenu2Item.setIcon (R.drawable.ic_launcher)"; ersetzen Sie ic_launcher einfach durch Ihre Icon-Datei (im res-Zeichen-Verzeichnis Ihres Programms). Ich hoffe, Sie meinen ActionBarSherlock.

Die Zeile subMenu1Item.setIcon (R.drawable.ic_launcher); ist für das ActionBar-Symbol für die Menüschaltfläche oben.

als Antwort auf „Das ist nicht möglich, durch Design“

Vielen Dank an Google für den Versuch, die Welt zu nehmen und lassen Sie uns es Rockschöße fahren, aber ... Google zu inkonsequent sein mürrisch über Inkonsistenzen. Es wäre schön, wenn Google ein Beispiel für JEDE "Menge" von APIs geben könnte, die sie anbieten. Es gibt API-Verweise auf Code, aber kein Beispiel, wie man sie zusammenstellt. Ein vollständiges, vollständig funktionierendes Beispiel, das als APK ausgeführt werden kann, ist alles, was ich will. Ich kann es von da aus austricksen. Wenn sie sich die Zeit nehmen können, die APK zu schreiben, wie viel schwerer wäre es, ein kleines Beispiel auf einer Standardvorlage zu programmieren? Für 30% von allem ist es nicht viel zu fragen. Ich hatte das gleiche Argument mit Microsoft damals und es passierte dann auch nicht. Und so und so bekommst du stackoverflow. :) Es ist eine Schande, dass ein Typ (Rock auf Jake Wharton) alleine arbeitet, um einen besseren Job mit einer rückwärtskompatiblen Action-Leiste zu machen, als Google mit seinem lächerlichen Action-Bar-Patch-Ding aufwarten kann.

@Override 
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) { 

    SubMenu subMenu1 = menu.addSubMenu("Action Item"); 
    subMenu1.add("Help"); 
    subMenu1.add("About"); 

    MenuItem subMenu1Item = subMenu1.getItem(); 
    subMenu1Item.setIcon(R.drawable.ic_launcher); 
    subMenu1Item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 

    SubMenu subMenu2 = menu.addSubMenu("All Options"); 
    subMenu2.add("Help"); 
    subMenu2.add("About"); 

    MenuItem subMenu2Item = subMenu2.getItem(); 
    subMenu2Item.setIcon(R.drawable.ic_launcher); 

    return super.onCreateOptionsMenu(menu); 
} 
32

stellen Ihr Menü mit Eigentum android:showAsAction="always" und in XML-Datei des Menüs Untermenüs hinzufügen, unter, dass Ihr Menü wie dieses

<item 
     android:id="@+id/mainMenu" 
     android:icon="@drawable/launcher" 
     android:showAsAction="always"> 
     <menu> 

      <item 
       android:id="@+id/menu_logout" 
       android:icon="@drawable/log_out" 
       android:title="logout"/> 
     </menu> 
    </item> 

dies die Symbole in Menüs

+1

funktioniert wie ein Charme, sollte als akzeptiert markiert werden –

+2

Untermenü-Icons werden nicht angezeigt in Lebkuchen. In 4.x funktioniert das OK –

+3

Dies ist nicht für Telefone mit einer physischen Menüschaltfläche geeignet. –

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

Referenz zeigen : How To show icons in Overflow menu in ActionBar

+0

Dies wird brechen, wenn Sie proguard verwenden. Den MenuBuilder in der proguard-Konfiguration zu behalten, sollte funktionieren. –

4

Es gibt tatsächlich einen einfachen Weg, es zu erreichen, s eit, was man sieht eigentlich ein Textview ist, so stellen Sie eine Spannweite, zum Beispiel:

final MenuItem menuItem=... 
final ImageSpan imageSpan=new ImageSpan(this,R.drawable.ic_stat_app_icon); 
final CharSequence title=" "+menuItem.getTitle(); 
final SpannableString spannableString=new SpannableString(title); 
spannableString.setSpan(imageSpan,0,1,0); 
menuItem.setTitle(spannableString); 

Das wird ein Symbol am Anfang des Menüpunktes setzen, kurz vor seinem ursprünglichen Text.

+0

Dies ist die beste Lösung und vielleicht die einfachste Lösung. Das Symbol ist jetzt links neben dem Menüpunkt sichtbar. Der Text wird jedoch am unteren Rand des Symbols ausgerichtet. Wie können wir es vertikal zentrieren? –

+0

@SureshKumar Sie meinen, Sie wollen beide vertikal zentriert? Hmmmm ... Vielleicht könntest du deine eigene angepasste Spanne erstellen, aber dann weiß ich nicht, wie gut es auf einigen Geräten aussehen wird ... Vielleicht gibt es eine Möglichkeit, die mir dafür nicht bewusst ist. Da ich nicht mehr damit klarkomme, würde ich mich freuen, wenn Sie zeigen, was Sie gefunden haben, auch wenn Sie nichts finden. –

+0

Funktioniert gut. Ich muss nur herausfinden, wie man eine bestimmte Größe für das Bild einstellt. Wie auch immer, beste Lösung, die ich gefunden habe! Hier habe ich meine Dankbarkeit! –

2

Vielleicht haben Sie das gleiche Problem wie ich.Also für mich Lösung einfach war, wenn Sie AppCompat verwenden nicht nur diese Eigenschaft verwenden:

android:showAsAction="always" 

statt es wie folgt verwendet werden:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/option" 
     android:title="@string/option" 
     android:icon="@drawable/option" 
     app:showAsAction="always"> 
    </item> 
</menu> 

Es gibt Unterschied in aditional xmlns: app und showAsAction ist Eigentum von App.

Ich hoffe, es hilft jemandem.

+2

Sie verstehen die Frage nicht einmal, mit showAsAction als 'immer ', das Symbol wird immer angezeigt, ABER es ist wie eine Aktionsleiste Taste, anstatt in der Menüpunkt im Dropdown-Menü. Nicht sicher, warum dies einige Stimmen erhalten hat. –

+0

Von anderen Menschen, die auch die Frage nicht verstehen. – f470071

+0

@KingKing er hat einige upvotes nicht, weil diese Frage, weil seine Antwort andere Arten von Problemen im Zusammenhang mit "Action Bar" gelöst .... wie ich möchte ich die Symbole in appbar anzeigen, aber Elemente gehen in Überlaufmenü .. und seine Antwort rettete mein Leben ... ich weiß, dass dies nicht der richtige Ort ist, um diese Antwort zu formulieren, aber zumindest hilft es jemandem, z mich selber –

Verwandte Themen