Wie ändere ich die Hintergrundfarbe des Optionsmenüs?
Ich versuche, ändern Sie die Standard-Farbe für das Menü "Optionen" weiß: ich möchte einen schwarzen hintergrund für jedes Element im Menü Optionen.
Habe ich versucht, einige schießt wie android:itemBackground="#000000" auf das item-element innerhalb des Menü-Elements, aber es hat nicht funktioniert.
Wie kann ich dies erreichen?
Kommentar zu dem Problem - Öffnen
InformationsquelleAutor der Frage feragusper | 2010-05-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eindeutig ein problem, das viele Programmierer haben und was hat Google noch zu bieten eine zufriedenstellende Lösung unterstützt.
Gibt es eine Menge von Absichten gekreuzt und Missverständnisse im Umlauf Beiträge zu diesem Thema, so Lesen Sie bitte die ganze Antwort, bevor Sie reagieren.
Unten habe ich eine mehr "verfeinert" und gut kommentierte version des hack von anderen Antworten auf dieser Seite, auch unter Einbeziehung von Ideen aus diesen sehr eng mit Fragen:
Ändern der Hintergrundfarbe des android-Menü
So ändern Sie die Hintergrundfarbe des Menü "Optionen"?
Android: anpassen der Anwendung-Menü (e.g hintergrund-Farbe)
http://www.macadamian.com/blog/post/android_-_theming_the_unthemable/
Android-Item Menu-Toggle-Button
Ist es möglich, das Android-Menü "Optionen" hintergrund nicht lichtdurchlässig?
http://www.codeproject.com/KB/android/AndroidMenusMyWay.aspx
Einstellung der Menü-hintergrund undurchsichtig
Getestet habe ich diesen hack auf 2.1 (simulator), 2.2 (2 echte Geräte) und 2.3 (2 echte Geräte). Ich habe keine 3.X-Tabletten zu probieren, aber veröffentlichen alle erforderlichen änderungen hier, wenn/falls ich das tun. Da 3.X-Tabletten verwenden-Action-Bars anstelle von Optionen, Menüs, wie hier beschrieben:
http://developer.android.com/guide/topics/ui/menus.html#options-menu
dieser hack wird sicherlich nahezu nichts zu tun (kein Schaden und keine gute) auf 3.X-Tabletten.
ERKLÄRUNG DES PROBLEMS (Lesen Sie diese vor der trigger-Antworten mit einem negativen Kommentar):
Optionen-Menü hat sehr unterschiedliche Formate auf unterschiedlichen Geräten. Rein schwarz mit weißem text auf einige, rein weiß mit schwarzen text auf einigen. Ich und viele andere Entwickler möchten, kontrollieren Sie die Hintergrundfarbe des Menü "Optionen" - Zellen , sowie die Farbe der Optionen im Menü text.
Bestimmte app-Entwickler müssen nur aus der Zelle die Hintergrundfarbe (nicht die text-Farbe), und Sie können dies tun, in eine sauberere Art und Weise mit dem android:panelFullBackground Stil beschrieben, der in einer anderen Antwort. Derzeit gibt es jedoch keine Kontrolle über das Optionen-Menü-text-Farbe-Stile, und so kann man diese Methode nur verwenden, ändern Sie den hintergrund zu einer anderen Farbe, die nicht den text "verschwinden".
Würden wir uns freuen, dies zu tun mit einer dokumentierten, zukunftssichere Lösung, aber man ist einfach nicht verfügbar ab Android <= 2.3. Also müssen wir eine Lösung, die funktioniert in den aktuellen Versionen und ist entworfen, um zu minimieren die Chancen der Absturz/Bruch in zukünftigen Versionen. Wir wollen eine Lösung, die fehl anmutig zurück auf die default-Verhalten, wenn es zu scheitern.
Es gibt viele legitime Gründe, warum man brauchen kann, um Steuern Sie das Aussehen des Optionen-Menüs (in der Regel mit einem visuellen Stil für den rest der app), damit ich nicht wohnen.
Es ist ein Google-Android-bug gepostet dazu: fügen Sie bitte Ihre Unterstützung, indem Sie die Hauptrolle spielen dieser bug (Hinweis: Google rät von "me-too" - Kommentare: nur ein Stern ist genug):
http://code.google.com/p/android/issues/detail?id=4441
ZUSAMMENFASSUNG DER LÖSUNGEN SO WEIT:
Mehrere Plakate haben vorgeschlagen, einen hack mit LayoutInflater.Factory. Die empfohlene hack arbeitete für Android <= 2.2 und nicht für Android 2.3, weil der hack gemacht, eine undokumentierte Annahme: dass man anrufen könnte, LayoutInflater.getView() direkt, ohne derzeit in einem Aufruf LayoutInflater.inflate() auf die gleiche LayoutInflater Instanz. Neuen code in der Android 2.3 brach diese Annahme und führten zu einer NullPointerException.
Meine leicht verfeinert hack unten nicht verlassen sich auf diese Annahme.
Darüber hinaus die hacks verlassen sich ebenfalls auf die Verwendung eines internen, undokumentierten class Namen "com.android.intern.Blick.Menü.IconMenuItemView" als string (und nicht als Java-Typ). Ich sehe keinen Weg, dies zu vermeiden und immer noch erreichen, das erklärte Ziel. Es ist jedoch auch möglich, das hack in einer sorgfältigen Weise, die fallen zurück, wenn "com.android.intern.Blick.Menü.IconMenuItemView" erscheint nicht auf dem aktuellen system.
Wieder verstehen, dass dies ist ein hack, und ich bin keineswegs fordern, das auf allen Plattformen funktioniert. Aber wir Entwickler Leben nicht in einer fantasy-akademischen Welt, wo alles durch das Buch: wir haben ein problem zu lösen und wir haben es zu lösen, so gut wir können. Zum Beispiel scheint es unwahrscheinlich, dass "com.android.intern.Blick.Menü.IconMenuItemView" existieren wird am 3.X-tablets, da diese Aktion Balken statt des Optionen-Menüs.
Schließlich, einige Entwickler haben dieses problem gelöst, indem völlig die Unterdrückung der Android-Optionen-Menü und schreiben Sie Ihre eigene Menü-Klasse (siehe einige der links oben). Ich habe nicht versucht, diese, aber wenn Sie Zeit haben, schreiben Sie Ihre eigenen Anzeigen und herausfinden, wie zu ersetzen, die Android - (ich bin mir sicher, der Teufel steckt im Detail hier), dann ist es vielleicht eine nette Lösung, die nicht erfordert keine undokumentierten hacks.
HACK:
Hier ist der code.
Diesen code verwenden, nennen addOptionsMenuHackerInflaterFactory() EINMAL von Ihrer Aktivität onCreate() oder activity onCreateOptionsMenu(). Es setzt einen Standard-Fabrik, die Auswirkungen auf die nachfolgende Erstellung von Optionen-Menü. Es hat keinen Einfluss auf Optionen-Menüs, die bereits erstellt wurden (die vorherigen hacks verwendet eine Funktion namens setMenuBackground(), das ist sehr irreführend, da die Funktion nicht, legen Sie Sie in einem beliebigen Menü Eigenschaften, bevor es zurück).
Vielen Dank für das Lesen und genießen!
InformationsquelleAutor der Antwort Louis Semprini
Nachdem er eine beträchtliche Menge an Zeit, versuchen, alle Optionen, der einzige Weg, ich war in der Lage, eine app mit AppCompat v7 ändern Sie das overflow-Menü-hintergrund wurde mit der itemBackground Attribut:
Getestet von API 4.2 auf 5.0.
InformationsquelleAutor der Antwort TheIT
Dem style-Attribut für den Menü-hintergrund ist
android:panelFullBackground
.Trotz allem, was die Dokumentation sagt, es braucht, um eine Ressource (z.B.
@android:color/black
oder@drawable/my_drawable
), es wird Abstürzen, wenn Sie eine Farbe verwenden Wert direkt ein.Diese auch loszuwerden, die Artikel Grenzen, ich war nicht in der Lage zu ändern oder zu entfernen, indem Sie primalpop Lösung.
Als für die Farbe für den text, ich habe nicht gefunden, einen Weg, um es durch Stile in 2.2 und ich bin sicher, ich habe alles versucht (das ist, wie ich entdeckte, den Menü-hintergrund-Attribut). Du brauchst primalpop Lösung.
InformationsquelleAutor der Antwort Pilot_51
Für Android 2.3 diese kann getan werden, mit einigen sehr schweren hacking:
Die Ursache für die Probleme mit Android 2.3 ist, dass in
LayoutInflater
die mConstructorArgs[0] = mContext ist nur während der Laufenden Anrufe zu
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3.3_r1/android/view/LayoutInflater.java/#352
(Fühlen Sie sich frei, um Stimmen für diese Antwort 😉 )
Ich getestet es funktioniert auf Android 2.3 und arbeiten immer noch auf frühere Versionen.
Wenn etwas bricht wieder in späteren Android-Versionen müssen Sie einfach sehen
Standard-Menü-Stil statt
InformationsquelleAutor der Antwort Marcus Wolschon
Lief einfach in dieses Problem auch, auf eine App, die müssten kompatibel werden mit Lebkuchen und behalten immer noch so viel von dem styling von Holo-fähigen Geräten wie möglich.
Fand ich eine relativ saubere Lösung, die funktionierte OK für mich.
In das Thema, dem ich ein 9-patch-drawable hintergrund um eine benutzerdefinierte Hintergrundfarbe:
Gab ich den Versuch auf, den Stil, die Farbe für den text, und nur ein Spannable die text-Farbe für meinen Artikel code:
InformationsquelleAutor der Antwort Nicolai Buch-Andersen
Eine Sache zu beachten, dass Sie Kerle sind über-komplizieren das problem ebenso wie viele andere Beiträge! Alles, was Sie tun müssen, ist erstellen Sie drawable-Selektoren, mit was auch immer Hintergründe, die Sie benötigen und legen Sie diese auf die tatsächlichen Elemente. Ich verbringe gerade zwei Stunden versucht, Ihre Lösungen (alle Vorschläge auf dieser Seite) und keiner von Ihnen arbeitete. Nicht zu erwähnen, dass es gibt Tonnen von Fehlern, die im wesentlichen verlangsamen Ihre Leistung in diesen try/catch-Blöcke, die Sie haben.
Anyways, hier ist ein Menü-xml-Datei:
Nun in Ihrem item1_selector:
Nächste mal Sie sich entscheiden, in den Supermarkt gehen durch Kanada versuchen Sie google maps!
InformationsquelleAutor der Antwort dropsOfJupiter
InformationsquelleAutor der Antwort primpap
Dank Marcus! Es funktioniert auf 2.3 reibungslos durch Behebung einiger Fehler in der syntax, hier ist der Feste code
InformationsquelleAutor der Antwort Halo Ha
dies ist die XML-Datei
InformationsquelleAutor der Antwort Android
dies funktioniert gut für mich
InformationsquelleAutor der Antwort Bincy Baby
Dies ist, wie ich das gelöst mine. Ich habe gerade angegeben, die hintergrund Farbe und text Farbe
im Stile. ie res > values > styles.xml Datei.
InformationsquelleAutor der Antwort Bukunmi