Light.DarkActionBar菜单项文本颜色不可更改?

时间:2012-11-12 08:12:27

标签: android android-actionbar actionbarsherlock android-menu

我一直在开发的应用程序使用ActionBarSherlock,主要主题继承自Theme.Sherlock.Light.DarkActionBar。该设计要求溢出菜单弹出窗口具有深色背景和白色文本。这适用于没有物理菜单按钮的设备,文本显示为预期的白色。但是,如果设备具有物理菜单按钮,则显示的菜单中显示的文本将保持黑色。

我的主题包含

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

...其中@ drawable / menu_hardkey_panel是深色9patch。

菜单弹出窗口的结果是...... Light.DarkActionbar issue

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

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

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

6 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

更新:我做了一些挖掘工作,我相信这个文件是the layout并且他们引用了textAppearanceListItemSmalltextAppearanceSmall。但是,它从特殊主题中获取此值,该主题指定为following in 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开始行应该可以解决问题。

答案 2 :(得分:1)

在我的研究中,我没有找到改变文字颜色的方法,但你至少可以优雅地处理硬键菜单。

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

从我生成的主题中注释掉“android:panelBackground”项目,使得文本至少在硬键菜单上可见,即使它与主题不完全匹配。

你也可以尝试用适用于你的主题和黑色文字的东西替换“menu_hardkey_panel_ 任何 .9.png”drawable。

答案 3 :(得分:0)

对我而言,这解决了问题,请尝试这样做:

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

答案 4 :(得分:0)

我找到了解决方案,使用:

getSupportActionBarContext()

e.g。

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

答案 5 :(得分:-1)

我认为由于Theme.Sherlock.Light.DarkActionBar没有正确设置其内容样式的事实是由于actionWidgetTheme属性与ContextThemeWrapper一起用于膨胀操作栏视图(Jake Wharton自己的话),因此需要类似以下内容(未经测试)以满足您的需求,但不要以一种方式不使用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>

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