21

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

我的主题包含

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

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

菜单弹出的最终外观是......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>

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

4

6 回答 6

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>
于 2012-11-19T17:04:57.820 回答
1

给它一个机会:有一个名为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.DarkActionBarTheme.Sherlock.Light. 这对深色操作栏无效。取线Theme.Holo应该可以解决问题。

于 2012-11-20T13:24:03.123 回答
1

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

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

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

您也可以尝试用适合您的主题和黑色文本的东西替换“menu_hardkey_panel_whatever .9.png”drawable

于 2013-04-17T20:34:42.357 回答
0

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

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);
于 2013-04-02T11:54:12.103 回答
0

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

<style name="MyTheme" parent="Theme.Sherlock.Light.DarkActionBar">
    ...
    <item name="actionBarWidgetTheme">@null</item>
    <item name="android:actionBarWidgetTheme">@null</item>
    ...
</style>
于 2013-03-05T08:32:55.347 回答
-1

我认为,由于 Theme.Sherlock.Light.DarkActionBar 没有正确设置其内容的样式,这是由于 actionWidgetTheme 属性与 ContextThemeWrapper 一起使用来膨胀动作栏视图(杰克沃顿自己的话),因此类似于将需要以下(未经测试)来满足您的需求,尽管以一种方式打破了您不使用 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>

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

于 2012-11-20T23:02:44.767 回答