使用ActionBarSherlock或其他库更改硬键菜单的文本颜色或背景图像有很多问题。但是我找不到任何使用appcompat处理材质主题的答案。
那么如何更改硬键菜单面板的文本颜色和背景呢?
默认情况下,面板如下所示(light.darkactionbar主题)。我真的不喜欢丑陋的灰色到灰色的对比,我想把文字颜色改成黑色。

最佳答案

appcompat库使用Theme.AppCompat.CompactMenu作为硬键菜单。默认情况下,硬键菜单总是灰色的,如果使用浅色或深色主题,则不重要。
默认9补丁背景:
深入研究appcmpat源代码,基本compat主题(Base.V7.Theme.AppCompat)中似乎有几个属性用于设置硬键菜单的样式:

<item name="panelMenuListWidth">@dimen/abc_panel_menu_list_width</item>
<item name="panelMenuListTheme">@style/Theme.AppCompat.CompactMenu</item>
<item name="panelBackground">@drawable/abc_menu_hardkey_panel_mtrl_mult</item>
<item name="android:panelBackground">@android:color/transparent</item>
<item name="listChoiceBackgroundIndicator">@drawable/abc_list_selector_holo_dark</item>

设置背景样式
一旦你知道怎么做的话,背景的设计其实是很简单的。您只需将panelBackground属性添加到自定义应用程序主题。
<style name="AppTheme" parent="AppBaseTheme">
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    <item name="panelBackground">@drawable/yourCustomBackground</item>
</style>

设置文本样式
设置文本的样式有点复杂。您需要创建一个自定义panelMenuListTheme并将其设置为itemTextAppearance
<style name="Theme.YourTheme.CompactMenu" parent="@style/Theme.AppCompat.CompactMenu">
    <item name="android:itemTextAppearance">@style/TextAppearance.YourTheme.Material.CompactMenu</item>
</style>

<style name="TextAppearance.YourTheme.Material.CompactMenu" parent="@android:style/TextAppearance.Medium">
    <item name="android:textColor">@color/yourCustomColor</item>
</style>

然后将自定义创建的panelMenuListTheme主题添加到自定义应用主题:
<style name="AppTheme" parent="AppBaseTheme">
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    <item name="panelMenuListTheme">@style/Theme.YourTheme.CompactMenu</item>
</style>

结果
(此示例图像中的background属性没有更改)

08-06 05:04