更改工具栏菜单项的颜色(非隐藏行动)

问题描述:

说我有一个菜单(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

在你的主题文件,你必须把这个:

<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

在样式文件

,放置以下:

<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

不知道您是否可以通过造型设置具体的背景以区分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

对于我忘了这行,这工作:设置 “机器人:文字颜色”

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

加入这行到你的基地主题style.xml:

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