Light.DarkActionBar菜单项的文字颜色不可改变?

我一直在开发的应用程序使用ActionBarSherlock,主要的主题inheritance自Theme.Sherlock.Light.DarkActionBar。 devise要求溢出菜单popup窗口有深色背景和白色文本。 这适用于没有物理菜单button的设备,并且文本显示为白色。 但是,如果设备具有物理菜单button,则显示的菜单中显示的文本将保持黑屏。

我的主题包含

<item name="android:panelBackground">@drawable/menu_hardkey_panel</item> 

… @ drawable / menu_hardkey_panel是一个深色的9patch。

由此产生的菜单popup窗口是… Light.DarkActionbar问题

我无法确定为什么发生这种情况,或者如何手动更改文本的颜色。 在我的主题中,我尝试了以下所有…

 <item name="android:actionMenuTextColor">@android:color/white</item> <item name="android:textAppearanceLargePopupMenu">@style/MyMenuTextAppearance.Large</item> <item name="android:textAppearanceSmallPopupMenu">@style/MyMenuTextAppearance.Small</item> 

我甚至尝试过

 <item name="android:actionBarWidgetTheme">@style/Theme.MyApp.Dark</item> 

…在哪里Theme.MyApp.Dark是…

 <style name="Theme.MyApp.Dark" parent="@style/Theme.Sherlock"> <item name="android:dropDownListViewStyle">@style/DropDownListView</item> <item name="dropDownListViewStyle">@style/DropDownListView</item> </style> 

没有人让我把文字改成白色。 如果我让我的基本主题inheritance自Theme.Sherlock,问题就解决了,文本是白色的,但不幸的是这不是一个选项。

Solutions Collecting From Web of "Light.DarkActionBar菜单项的文字颜色不可改变?"

不完全确定这一点,但我相信popup菜单使用与溢出菜单相同的样式。 在这种情况下,你只需要做这样的事情。

 <item name="android:itemTextAppearance">@style/your_new_text_appearance</item> <style name="your_new_text_appearance"> <item name="android:textColor">@android:color/white</item> </style> 

给它一个机会:有一个名为actionMenuTextAppearance的文本外观。 你尝试过吗?

更新:我做了一些更多的挖掘,我相信这个文件是布局 ,在那里他们引用textAppearanceListItemSmalltextAppearanceSmall 。 但是,它将从Theme.Holo.Light指定的特殊主题中获取此值

 <item name="panelMenuListTheme">@android:style/Theme.Holo.Light.CompactMenu</item> 

Theme.Holo像这样:

 <item name="panelMenuListTheme">@android:style/Theme.Holo.CompactMenu</item> 

问题来自于Sherlock.__Theme.DarkActionBar的父母是Theme.Sherlock.Light 。 这不适用于黑暗的行动栏。 从Theme.Holo采取行应该做的伎俩。

在我的研究中,我还没有find改变文本颜色的方法,但是你至less可以优雅地处理硬键菜单。

这个链接为我提供了一个可以解决的问题: https : //github.com/jgilfelt/android-actionbarstylegenerator/issues/30

从我生成的主题中注释掉“android:panelBackground”项目,即使它不能完美匹配主题,文本也至less可以在硬键菜单上看到。

您也可以尝试replace“menu_hardkey_panel_ whatever .9.png”可绘制的东西,将适用于您的主题和黑色文本。

对我来说,这解决了这个问题,试试这个:

 <style name="MyTheme" parent="Theme.Sherlock.Light.DarkActionBar"> ... <item name="actionBarWidgetTheme">@null</item> <item name="android:actionBarWidgetTheme">@null</item> ... </style> 

我find了解决办法,使用:

 getSupportActionBarContext() 

例如

 ArrayAdapter<CharSequence> list = ArrayAdapter.createFromResource(getSupportActionBarContext(), R.array.navigation, layout.simple_spinner_item); list.setDropDownViewResource(layout.simple_spinner_dropdown_item); getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); getSupportActionBar().setListNavigationCallbacks(list, this); 

我认为,由于Theme.Sherlock.Light.DarkActionBar没有对其内容进行样式化的事实是由于actionWidgetTheme属性与ContextThemeWrapper一起使用来夸大操作栏视图(Jake Wharton自己的话),因此类似于以下(未testing)将需要满足您的需求,虽然打破了您不需要使用Theme.Sherlock作为父母的方式:

 <style name="MyColorTheme" parent="Theme.Sherlock"> <item name="android:actionMenuTextColor">@android:color/white</item> <item name="actionMenuTextColor">@android:color/white</item> </style> <style name="YourMainTheme" parent="Theme.Sherlock.Light.DarkActionBar"> <item name="android:actionMenuTextAppearance">@style/MyColorTheme</item> <item name="actionMenuTextAppearance">@style/MyColorTheme</item> </style> 

可能工作或不工作。 这就是问题所在 :)