Android:按下菜单项时的背景颜色

Posted

技术标签:

【中文标题】Android:按下菜单项时的背景颜色【英文标题】:Android: background color when menu item is pressed 【发布时间】:2014-12-22 11:35:37 【问题描述】:

我试图在按下菜单项时将背景颜色更改为菜单项。按下时更改背景颜色,但不更改颜色。

WHISED:

背景:深灰色 背景按下:橙色

获得:

背景:深灰色 背景按下:蓝色(默认 android

我能做什么?谢谢

Styles.xml

<style name="AppTheme2" parent="android:Theme.Holo">  
    <item name="android:popupMenuStyle">@style/MyApp.PopupMenu</item>
</style>

<style name="MyApp.PopupMenu" parent="android:Widget.Holo.ListPopupWindow">
    <item name="android:popupBackground">@drawable/menu_item_selector</item>
</style>

menu_item_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@drawable/menu_item_fondo_pressed" android:state_focused="true"/>
<item android:drawable="@drawable/menu_item_fondo_pressed" android:state_pressed="true"/>
<item android:drawable="@drawable/menu_item_fondo"/>

</selector>

【问题讨论】:

参考这个问题 [***.com/questions/18909273/… [1]: ***.com/questions/18909273/… 我用过ActionBar Style Generator。但我不知道我需要什么可绘制对象 【参考方案1】:

答案有点晚,但找到了问题的解决方案。

styles.xml 中你有你的 AppTheme

<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:dropDownListViewStyle">@style/ListViewStyle</item>
    <item name="dropDownListViewStyle">@style/ListViewStyle</item>
    <item name="popupMenuStyle">@style/PopupMenu</item>
    <item name="textAppearanceLargePopupMenu">@style/PopupMenuTextAppearanceLarge</item>
    <item name="textAppearanceSmallPopupMenu">@style/PopupMenuTextAppearanceSmall</item>
    <item name="android:textAppearanceLargePopupMenu">@style/PopupMenuTextAppearanceLarge</item>
    <item name="android:textAppearanceSmallPopupMenu">@style/PopupMenuTextAppearanceSmall</item>
</style>

popupMenuStyle 用于 popupMenu 本身,在这种情况下,我们可以在 popupBackground 项中更改 unselected 背景,就像这样(但你已经知道):

<style name="PopupMenu" parent="@android:style/Widget.PopupMenu">
    <item name="android:popupBackground">@drawable/selector_popup_menu_bg</item>
    <item name="android:textColor">@color/text_color_white</item>
    <item name="android:dropDownSelector">@drawable/selector_popup_menu_dropdown</item>
</style>

还有 textColordropDownSelector 项目,它们在我测试过的设备上没有做任何事情,但我也在这里更改这些以防万一,因为父 ( Widget.PopupMenu) 也使用它们。

正确更改这些项目的方法是在 AppTheme 中更改它们,就像我在上面的 AppTheme 代码中显示的那样。我不会显示 textAppearances 的代码,因为它不是主题。

我将这些项目中的每一个都添加了两次(带有和不带有“android:”前缀)的原因是为了让它在 5.0 和棒棒糖之前的设备上都可以工作。唯一的例外是 popupMenuStyle 只需要没有“android:”前缀的项目,如果你使用的是Popup的框架版本,但如果你使用support.v7版本,那么你需要@ 987654326@(see this *** answer for more info)。

所以要选择不同的项目背景,我们只需在 dropDownListViewStyle 中更改它(我还添加了 divider):

<style name="ListViewStyle" parent="@android:style/Widget.ListView">
    <item name="android:listSelector">@drawable/selector_popup_menu_dropdown</item>
    <item name="android:divider">@color/text_color_white</item>
    <item name="android:dividerHeight">1dp</item>
</style>

有趣的部分是listSelector,它是被选中项的背景。如果我们只添加@color,那么所选项目将不会正确失效(即使您将选择移出它也会保持选中状态),要使其正确而不是颜色,需要使用选择器:

selector_popup_menu_dropdown.xml

<?xml version="1.0" encoding="utf-8"?>

<item android:state_window_focused="false" android:drawable="@android:color/transparent" />

<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
<item android:state_focused="true"  android:state_enabled="false" android:state_pressed="true" android:drawable="@color/gray_btn_bg_color" />
<item android:state_focused="true"  android:state_enabled="false"                              android:drawable="@color/gray_btn_bg_color" />
<item android:state_focused="true"                                android:state_pressed="true" android:drawable="@color/gray_btn_bg_color" />
<item android:state_focused="false"                               android:state_pressed="true" android:drawable="@color/gray_btn_bg_color" />
<item android:state_focused="true"                                                             android:drawable="@color/gray_btn_bg_color" />

对这种琐碎的事情的解释有点太长了,但我们一直坚持到最后。耶!

【讨论】:

谢谢!你的实验和解释对我很有用:)

以上是关于Android:按下菜单项时的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

导航条——动态改变导航菜单的背景颜色

按下Android设置背景颜色按钮

Android微调器下拉菜单背景颜色更改

如何设置Android Studio背景的颜色

如何使用背景颜色设置圆形按钮并在按下时更改颜色

更改圆形按钮android的背景颜色