Kann ich die Hintergrundfarbe eines Menüelements in Android ändern?
Bitte lassen Sie mich wissen, wenn jemand eine Lösung dafür hat. Die letzte Option ist natürlich das Anpassen, aber es gibt eine Möglichkeit, die Textfarbe zu ändern, ohne sie anzupassen.
Antworten:
Eine einfache Zeile in Ihrem Thema :)
quelle
actionBarStyle
beispielsweise in der. Es wird innen nicht funktionierenactionBarStyle
, obwohl das logisch erscheint!<item name="actionMenuTextColor">@color/your_color</item>
Sie zur Unterstützung niedrigerer API-Versionen nicht den Android-Namespacetheme
Ihrer Symbolleiste ein Attribut festlegen , funktioniert dies.Es scheint, dass ein
in meinem Thema und
Ändern Sie in styles.xml den Stil von Listenelementen, jedoch nicht von Menüelementen.
quelle
android:itemTextAppearance
Attribut kann nicht in einem Stil platziert werden, dessen übergeordnetes Element vorhanden ist,parent="@android:style/Widget.Holo.ListPopupWindow"
da dies nicht ordnungsgemäß gerendert wird. Es muss in einem Top-Level-Stil sein, wie einer, dessen Eltern sindandroid:Theme.Holo.Light.DarkActionBar
.Theme.Holo
oderTheme.Holo.Light.DarkActionBar
oder ähnliches.Sie können die Farbe des
MenuItem
Textes einfach ändern, indem SieSpannableString
anstelle von verwendenString
.quelle
menu.findItem(R.id.menu_item_id);
stattmenu.getItem()
Wenn Sie die neue Symbolleiste mit dem Thema verwenden
Theme.AppCompat.Light.NoActionBar
, können Sie sie folgendermaßen formatieren.Nach den Ergebnissen, die ich erhalten habe,
android:textColorPrimary
zeigt die Textfarbe den Namen Ihrer Aktivität an, der der Haupttext der Symbolleiste ist.android:textColorSecondary
ist die Textfarbe für Untertitel und weitere Optionen (3 Punkte). (Ja, es hat seine Farbe entsprechend dieser Eigenschaft geändert!)android:textColor
Ist die Farbe für alle anderen Texte einschließlich des Menüs.Stellen Sie das Thema schließlich auf die Symbolleiste ein
quelle
android:actionMenuTextColor
(siehe stackoverflow.com/a/5538709/423105 ).Wenn Sie das Menü als verwenden,
<android.support.design.widget.NavigationView />
fügen Sie einfach die folgende Zeile hinzuNavigationView
:Ebenfalls als colorTint für Symbol verfügbar, überschreibt es auch die Farbe für Ihr Symbol. Dazu müssen Sie folgende Zeile hinzufügen:
Beispiel:
Hoffe es wird dir helfen.
quelle
Ich habe es programmatisch so gemacht:
quelle
Wie Sie in dieser Frage sehen können , sollten Sie:
Der obige Code ändert die Textfarbe der Menüaktionselemente für API> = v21.
Oben ist der Code für API <v21
quelle
Ich habe das HTML-Tag verwendet, um die Textfarbe eines einzelnen Elements zu ändern, wenn das Menüelement aufgeblasen wird. Hoffe es wäre hilfreich.
quelle
EINFACHSTE Möglichkeit, benutzerdefinierte Menüfarben für eine einzelne Symbolleiste und nicht für AppTheme zu erstellen
übliche Symbolleiste auf styles.xml
unser benutzerdefinierter Symbolleistenstil
quelle
In Kotlin habe ich folgende Erweiterungen geschrieben:
und so verwendet:
quelle
Die kurze Antwort lautet JA. Du Glückspilz!
Dazu müssen Sie einige Stile der Android-Standardstile überschreiben:
Schauen Sie sich zunächst die Definition der Themen in Android an:
Das Erscheinungsbild des Textes im Menü befindet sich also
@android:style/TextAppearance.Widget.IconMenu.Item
in der Definition der Stile in Jetzt :
Jetzt haben wir also den Namen der betreffenden Farbe, wenn Sie im Farbordner der Ressourcen des Systems nachsehen:
Zum Schluss müssen Sie Folgendes tun:
Überschreiben Sie "TextAppearance.Widget.IconMenu.Item" und erstellen Sie Ihren eigenen Stil. Verknüpfen Sie es dann mit Ihrem eigenen Selektor, um es so zu gestalten, wie Sie es möchten. Hoffe das hilft dir. Viel Glück!
quelle
Das Optionsmenü in Android kann angepasst werden, um den Hintergrund festzulegen oder das Erscheinungsbild des Textes zu ändern. Der Hintergrund und die Textfarbe im Menü konnten mithilfe von Themen und Stilen nicht geändert werden. Der Android-Quellcode (data \ res \ layout \ icon_menu_item_layout.xml) verwendet ein benutzerdefiniertes Element der Klasse "com.android.internal.view.menu.IconMenuItem" View für das Menülayout. Wir können Änderungen in der obigen Klasse vornehmen, um das Menü anzupassen. Verwenden Sie dazu die Factory-Klasse LayoutInflater und legen Sie den Hintergrund und die Textfarbe für die Ansicht fest.
quelle
03-23 19:45:25.134: E/AndroidRuntime(26761): java.lang.IllegalStateException: A factory has already been set on this LayoutInflater
Danke für das Codebeispiel. Ich musste es ändern, damit es mit einem Kontextmenü funktioniert. Das ist meine Lösung.
Bei mir funktioniert das mit Android 1.6, 2.03 und 4.03.
quelle
Ich fand es Eureka !!
in Ihrem App-Thema:
Hier ist Ihr Action-Bar-Thema:
und hier ist dein Popup-Thema:
Prost ;)
quelle
Um die Textfarbe des Menüelements zu ändern, verwenden Sie den folgenden Code
wo
quelle
Dank max.musterman ist dies die Lösung, mit der ich in Level 22 arbeiten konnte:
Das Hardcodierte
Color.BLACK
könnte ein zusätzlicher Parameter für diesetMenuTextColor
Methode werden. Außerdem habe ich dies nur für Menüpunkte verwendet, die warenandroid:showAsAction="never"
.quelle
Sie können die Farbe programmgesteuert einstellen.
quelle
Das Hinzufügen zu meiner styles.xml hat bei mir funktioniert
quelle
Fügen Sie dies einfach Ihrem Thema hinzu
Getestet auf API 21
quelle
<style name="AppTheme.ItemTextStyle" parent="@android:style/TextAppearance.Widget">
, sonst erscheint der Text im Überlaufmenü zu klein. Beachten Sie auch, dass diese Technik nur unter Android 5 und höher funktioniert.quelle
Meine Situation war die Einstellung der Textfarbe im Optionsmenü (das Hauptmenü der App wurde beim Drücken der Menütaste angezeigt).
Getestet in API 16 mit der Bibliothek appcompat-v7-27.0.2
AppCompatActivity
fürMainActivity
undAppCompat
Thema für die Anwendung in AndroidManifest.xml .styles.xml :
Ich weiß nicht, ob dies
textColorSecondary
andere Elemente betrifft, aber es steuert die Menütextfarbe.Ich habe einige Beispiele zu diesem Thema durchsucht, aber alle gebrauchsfertigen Snippets haben nicht funktioniert.
Deshalb wollte ich es mit dem Quellcode für die appcompat-v7- Bibliothek untersuchen (speziell mit dem res- Ordner des .aar- Pakets).
In meinem Fall habe ich Eclipse mit explodierten .aar- Abhängigkeiten verwendet. So konnte ich die Standardstile ändern und die Ergebnisse überprüfen. Ich weiß nicht, wie ich die Bibliotheken für Gradle oder Android Studio auflösen soll direkt . Es verdient einen weiteren Untersuchungsfaden.
Mein Ziel war es also herauszufinden, welche Farbe in der Datei res / values / values.xml für den Menütext verwendet wird (ich war mir fast sicher, dass die Farbe vorhanden war).
#f00
allen einen Wert .secondary_text_default_material_light
Farbelement.@color/abc_secondary_text_material_light
.Base.ThemeOverlay.AppCompat.Light
undPlatform.AppCompat.Light
.android:textColorSecondary
undandroid:textColorTertiary
in derBase.ThemeOverlay.AppCompat.Light
.android:textColorSecondary
.Theme.AppCompat.Light
und nicht das hatteThemeOverlay.AppCompat.Light
).Base.ThemeOverlay.AppCompat.Light
. Es hatte ein KindThemeOverlay.AppCompat.Light
.ThemeOverlay.AppCompat.Light
ich seine Verwendung imBase.Theme.AppCompat.Light.DarkActionBar
Thema alsactionBarPopupTheme
Attributwert gefunden.Theme.AppCompat.Light.DarkActionBar
war ein untergeordnetes Element des gefundenen,Base.Theme.AppCompat.Light.DarkActionBar
sodass ich dieses Attribut in meiner styles.xml verwenden konnte verwenden konnte.ThemeOverlay.AppCompat.Light
und dasandroid:textColorSecondary
Attribut geändert .quelle
Sephys Lösung funktioniert nicht. Es ist möglich, das Erscheinungsbild des Optionsmenüelements mit der oben beschriebenen Methode zu überschreiben, jedoch nicht mit dem Element oder Menü. Dazu gibt es im Wesentlichen drei Möglichkeiten:
Weitere Hinweise finden Sie in Ausgabe 4441: Menü "Benutzerdefinierte Optionen" .
quelle
versuchen Sie diesen Code ....
quelle
java.lang.IllegalStateException: A factory has already been set on this LayoutInflater
Wenn Sie die Farbe für einen einzelnen Menüpunkt festlegen möchten, ist das Anpassen eines Symbolleistenmotivs nicht die richtige Lösung. Um dies zu erreichen, können Sie android: actionLayout und eine Aktionsansicht für den Menüpunkt verwenden.
Erstellen Sie zunächst eine XML-Layoutdatei für die Aktionsansicht. In diesem Beispiel verwenden wir eine Schaltfläche als Aktionsansicht:
menu_button.xml
Im obigen Code-Snippet verwenden wir, um
android:textColor="?android:attr/colorAccent"
die Textfarbe der Schaltfläche anzupassen.Fügen Sie dann in Ihre XML-Layoutdatei für das Menü
app:actionLayout="@layout/menu_button"
Folgendes ein:main_menu.xml
Zuletzt überschreiben Sie die
onCreateOptionsMenu()
Methode in Ihrer Aktivität:... oder Fragment:
Weitere Informationen zu Aktionsansichten finden Sie im Android-Entwicklerhandbuch .
quelle
So können Sie einen bestimmten Menüpunkt mit Farbe färben, funktioniert für alle API-Ebenen:
Auf diese Weise verlieren Sie den Hintergrundwahleffekt. Hier ist der Code zum Anwenden eines benutzerdefinierten Hintergrundwählers auf alle untergeordneten Menüelemente.
Hier ist auch die Hilfsfunktion:
quelle
Zum Ändern der Textfarbe können Sie einfach eine benutzerdefinierte Ansicht für das MenuItem festlegen und anschließend die Farbe für den Text definieren.
Beispielcode: MenuItem.setActionView ()
quelle