2015-02-05 9 views
30

Sagen wir, ich habe ein Menü (options_menu.xml) ähnlich der folgenden:ändern Toolbar Menüpunkt Farbe (nicht versteckt Aktion)

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" > 
    <item android:id="@+id/action_login" 
      android:title="Login" 
      app:showAsAction="always"/> 
</menu> 

, die ich in die neue Toolbar Element aufzublasen

mToolbar.inflateMenu(R.menu.options_home); 

Daraus ergibt sich so etwas wie

enter image description here

gibt es eine Möglichkeit thi zu ändern s Textfarbe ohne Verwenden eines Bilds, Ändern des Rests der Symbolleisten-Textfarbe oder Hinzufügen einer benutzerdefinierten Ansicht zur Symbolleiste? Suche nach einer Antwort für minSdk 15 (appcompat).

Update:

Meine relevanten Stil:

<style name="AppTheme" parent="AppTheme.Base"> 
    <item name="actionMenuTextColor">@color/ww_red</item> 
</style> 

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="colorPrimary">@color/red</item> 
    <item name="colorAccent">@color/theme_accent</item> 

    <item name="android:textColor">@color/text_dark</item> 

    <item name="android:colorEdgeEffect">@color/gray</item> 
</style> 
+0

erstellen Sie ein Bild ke Eping Hintergrundfarbe gleiche wie Symbolleiste und setzen Sie textColor was auch immer Sie wollen – Apurva

+0

@Apurva Ich nehme an, dass würde funktionieren, aber ich würde gerne eine Lösung finden, die benutzerdefinierte Assets für jeden Text "Schaltfläche", die hinzugefügt wird. – loeschg

+0

@loeschg Wird der Menüpunkt 'Login' eine andere Farbe haben als andere Menüpunkte? – Vikram

Antwort

95

In Ihrem Theme-Datei müssen Sie diese setzen:

<style name="AppTheme.ActionBar" parent="Theme.AppCompat.Light.DarkActionBar"> 
     ... 
    <item name="actionMenuTextColor">@color/text_color</item> 
     ... 
</style> 

und wenden Sie dieses Thema auf Ihre Toolbar-Ansicht an dies:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/main_toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    android:layout_gravity="top" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
    android:theme="@style/AppTheme.ActionBar"/> 

android: theme = "@ style/AppTheme.ActionBar" vergessen Sie nicht, diese Zeile in Ihrer Symbolleiste

+0

Ich nehme meinen früheren Kommentar zurück. Das funktioniert! – loeschg

+0

App: Thema ist veraltet. – hungryghost

+0

Ja, ich habe aktualisiert. Danke – koni

5

in Ihrem Stil-Datei, legen Sie die folgenden Schritte aus:

<style name="MyAppTheme" parent="@android:style/Theme.Holo.Light"> 
     <item name="android:actionBarStyle">@style/MyActionBar</item> 
     <item name="android:titleTextStyle">@style/MyActionBar.TitleTextStyle 
     <item name="android:actionMenuTextAppearance">@style/MyActionBar.MenuTextStyle</item> 
     <item name="android:actionMenuTextColor">@color/action_bar_red</item> 
    </style> 

    <style name="MyActionBar.TitleTextStyle" 
     parent="android:style/TextAppearance.Holo.Widget.ActionBar.Title"> 
     <item name="android:textColor">#F0F</item> 
     <item name="android:textStyle">bold</item> 
     <item name="android:textSize">24dip</item> 
    </style> 

    <style name="MyActionBar.MenuTextStyle" 
     parent="android:style/TextAppearance.Holo.Widget.ActionBar.Menu"> 
     <item name="android:textColor">#F0F</item> 
     <item name="android:textStyle">bold</item> 
     <item name="android:textSize">24dip</item> 
    </style> 


Sie können in der obigen Art Änderungen Artikel für Ihre Anforderungen. Ich habe jedoch kein separates Styling für die Farbe hinzugefügt. Wie Sie vielleicht sehen, ordne ich ihm gerade rote Farbe zu (die ich in meiner Farbdatei deklariert habe). Sie können sich nach Bedarf ändern.

+0

Sieht aus wie dies Holo spezifisch ist. Ich benutze die neue Lollipop-Symbolleiste. – loeschg

+2

Down vote? Ernst!! Es wurde nie in der Frage erwähnt, dass es für Lollipop war. Ich gab nur den generischen Vorschlag, wie das OP hätte laufen können. Die akzeptierte Lösung ist auch ähnlich wie ich vor zwei Wochen vorgeschlagen habe .. Schade .. Grausame Welt..!! Sehr inspirierend für Mitwirkende .. Daumen hoch .. –

3

Nicht sicher, ob Sie bestimmte Hintergründe zu trennen MenuItem s nur durch Styling setzen können, aber Sie könnten einfach setActionView für Ihre MenuItem.

Erstellen Sie zunächst ein Layout wie item_av.xml:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#FF0000" 
    android:padding="5dp"> 
    <TextView 
     android:text="LOGIN" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:textSize="12sp" 
     android:gravity="center"/> 
</LinearLayout> 

stellte es dann auf Ihre MenuItem in onCreateOptionsMenu:

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

    MenuItem item = menu.findItem(R.id.action_login); 
    item.setActionView(R.layout.item_av); 

    return true; 
} 
+0

Ich bin nicht auf der Suche nach dem Hintergrund. Nur die Textfarbe. Überprüfen Sie Ihren Vorschlag. – loeschg

+0

@loeschg mein Schlechter. Auf diese Weise können Sie aber auch einfach die textColor der TextView setzen. – Simas

+0

Haha, ich weiß. Wollte nur klären, falls dies die Lösung (auch für andere, die hier enden könnten) irgendwie ändern würde. Scheint irgendwie lächerlich, dass Sie die Textfarbe von Text, der bereits dort ist, nicht ändern können. Hinweis: Bei diesem Ansatz müssen Sie einen onClickListener direkt in der Ansicht festlegen, anstatt den menuItemClickLIstener zu verwenden. – loeschg

7

Für mich ist dies gearbeitet: Einstellung der "android: textcolor"

<style name="AppTheme.ActionBar" parent="Theme.AppCompat.Light.DarkActionBar"> 
     ... 
     <!--This would set the menu item color--> 
     <item name="android:textColor">#000</item> 
     ... 
</style> 
0

Fügen Sie diese Zeile in Ihrer Basis Thema in style.xml:

<item name="android:actionMenuTextColor">@color/yourColor</item> 
Verwandte Themen