2015-02-05 116 views
30

說我有一個菜單(options_menu.xml)類似以下內容:更改工具欄菜單項的顏色(非隱藏行動)

<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> 

我膨脹到新的工具欄項目

mToolbar.inflateMenu(R.menu.options_home); 

這導致類似

enter image description here

有沒有辦法來改變THI s文字顏色沒有使用圖像,更改工具欄文本顏色的其餘部分,或者通過向工具欄添加自定義視圖?尋找minSdk 15(appcompat)的答案。

更新:

我的相關風格:

<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

創建映像科eping背景顏色相同的工具欄和設置textColor任何你想 – Apurva 2015-02-17 18:18:25

+0

@Apurva我想這會工作,但我想找到一個解決方案,避免需要自定義資產爲每個文本「按鈕」添加。 – loeschg 2015-02-17 18:22:09

+0

@loeschg「登錄」菜單項是否與其他菜單項顏色不同? – Vikram 2015-02-18 16:15:06

回答

95

在你的主題文件,你必須把這個:

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

並將此主題應用於您的工具欄視圖這樣的:

<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"/> 

機器人:主題= 「@風格/ AppTheme.ActionBar」沒有工具欄

+0

我收回我先前的評論。這樣可行! – loeschg 2015-02-18 19:24:01

+0

應用程序:主題已被棄用。 – hungryghost 2015-05-31 09:52:48

+0

是的,我更新了。謝謝 – koni 2015-06-01 10:07:28

5
在樣式文件

,放置以下:

<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> 


你可以在上面的樣式變化項目,以滿足您的要求。我沒有爲顏色添加單獨的樣式。正如你可能看到的,我只是將紅色(我已經在我的顏色文件中聲明)分配給它。您可以根據需要進行更改。

+0

看起來這是Holo特有的。我正在使用新的棒棒糖工具欄。 – loeschg 2015-02-06 15:13:42

+2

反對票?認真!這個問題從來沒有提到它是用於棒棒糖的..我只是給出了關於OP如何去做的一般性建議..接受的解決方案也類似於我在兩週前提出的建議..太糟糕了..殘酷的世界..!!非常鼓舞貢獻者..豎起大拇指.. – 2015-02-19 18:25:48

3

不知道您是否可以通過造型設置具體的背景以區分MenuItem,但您可以僅爲爲MenuItem

首先創建一個像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> 

然後將其設置爲你的MenuItemonCreateOptionsMenu

@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

我不想設置背景。只是文字顏色。檢查你的建議。 – loeschg 2015-02-17 21:04:10

+0

@loeschg我的不好。但是這樣你可以簡單地設置TextView的textColor。 – Simas 2015-02-17 21:11:58

+0

哈哈,我知道。只是想澄清,如果這會以某種方式改變解決方案(包括其他人可能會在這裏結束)。似乎有點荒謬,你不能改變已經存在的文本的文本顏色。 請注意,這種方法需要直接在視圖上設置onClickListener,而不是使用menuItemClickLIstener。 – loeschg 2015-02-17 21:15:00

7

對於我忘了這行,這工作:設置 「機器人:文字顏色」

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

加入這行到你的基地主題style.xml:

<item name="android:actionMenuTextColor">@color/yourColor</item> 
相關問題