2017-07-27 2 views
3

Ich verstehe nicht, warum so schmerzhaft ist, eine Farbe für eine Android-App zu ändern. Ich habe mehrere Möglichkeiten ausprobiert, um die Hintergrundfarbe des Popup-Menüs in meiner Aktionsleiste ohne Erfolg zu ändern.Android ändern Hintergrundfarbe des Popup-Menüs

Ich benutze eine AppTheme.NoActionBar, um offensichtlich die Aktionsleiste zu stylen.

<style name="AppTheme.NoActionBar"> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
    <item name="navigationIcon">@drawable/ic_return_dark</item> 
    <item name="overlapAnchor">false</item> 
    <item name="popupMenuStyle">@style/PopupMenu</item> 
</style> 

<style name="PopupMenu" parent="Widget.AppCompat.PopupMenu"> 
    <item name="android:popupBackground">@color/color4</item> 
</style> 

Im Anschluss an die Beispiele, die ich gefunden, da diese Erklärung war, dass Sie in Ihrem benutzerdefinierten Stil (in meinem Fall AppTheme.NoActionBar) eine benutzerdefinierte popupMenuStyle, um benutzerdefinierte die popupBackground einfügen müssen , die die Hintergrundfarbe des Popup-Menüs ändert. Es funktioniert nicht.

enter image description here

Was kann ich tun, um die Hintergrundfarbe von Popup-Menü zu ändern?

+0

@Pavneet_Singh versucht und gibt diese Nachricht: "Fehler: (2688, 21) Keine Ressource gefunden, die den angegebenen Namen entspricht: Attr 'PopupBackground'." – sfirc

Antwort

1

Um die Farbe des Optionsmenüs in Android zu ändern, hilft das Ändern von Designs und Stilen nicht. Sie müssen die LayoutInflater Factory-Klasse initialisieren.

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.my_menu, menu); 
    getLayoutInflater().setFactory(new Factory() { 
    @Override 
    public View onCreateView(String name, Context context, 
    AttributeSet attrs) { 
    if (name .equalsIgnoreCase(“com.android.internal.view.menu.IconMenuItemView”)) { 
    try { 
    LayoutInflater f = getLayoutInflater(); 
    final View view = f.createView(name, null, attrs); 
    new Handler().post(new Runnable() { 
    public void run() { 

    view.setBackgroundResource(R.drawable.your_color); 

    ((TextView) view).setTextColor(Color.your_color); 
    } 
    }); 
    return view; 
    } catch (InflateException e) { 
    } catch (ClassNotFoundException e) { 
    } 
    } 
    return null; 
    } 
    }); 
    return super.onCreateOptionsMenu(menu); 
    } 
+0

Ich aktualisiere das Menü in der OnCreateOptionsMenu-Methode. Die Elemente sind in der XML-Datei verschachtelt. Ich bin nicht sicher, wo OverflowMenu Stil verwendet werden soll, um zu arbeiten. Kannst du mir bitte Helfen? – sfirc

+0

Fügen Sie den Code zu den styles.XML hinzu – Abhi

+0

Es hat nicht Sinn, nur den obigen Code in styles.xml zu deklarieren, und es funktioniert nicht. Wo sollte ich OverflowMenu verwenden, woanders außer styles.xml? – sfirc

Verwandte Themen