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

use*_*152 5 android menuitem background-color

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

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

Dar*_*iak 5

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

\n\n

styles.xml中,您有AppTheme

\n\n
<style name="AppTheme" parent="AppBaseTheme">\n    <item name="android:dropDownListViewStyle">@style/ListViewStyle</item>\n    <item name="dropDownListViewStyle">@style/ListViewStyle</item>\n    <item name="popupMenuStyle">@style/PopupMenu</item>\n    <item name="textAppearanceLargePopupMenu">@style/PopupMenuTextAppearanceLarge</item>\n    <item name="textAppearanceSmallPopupMenu">@style/PopupMenuTextAppearanceSmall</item>\n    <item name="android:textAppearanceLargePopupMenu">@style/PopupMenuTextAppearanceLarge</item>\n    <item name="android:textAppearanceSmallPopupMenu">@style/PopupMenuTextAppearanceSmall</item>\n</style>\n
Run Code Online (Sandbox Code Playgroud)\n\n

popupMenuStyle用于 popupMenu 本身,在这种情况下,我们可以更改popupBackground项中未选定的背景,如下所示(但您已经知道了)

\n\n
<style name="PopupMenu" parent="@android:style/Widget.PopupMenu">\n    <item name="android:popupBackground">@drawable/selector_popup_menu_bg</item>\n    <item name="android:textColor">@color/text_color_white</item>\n    <item name="android:dropDownSelector">@drawable/selector_popup_menu_dropdown</item>\n</style>\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n

我将这些项目添加两次(带和不带“android:”前缀)的原因是使其在 5.0 和棒棒糖之前的设备上都能工作。唯一的例外是popupMenuStyle只需要不带“android:\xe2\x80\x9d 前缀的项目,如果你\xe2\x80\x99re 使用 的框架版本Popup,但如果你使用该support.v7版本,那么你需要android:popupMenuStyle请参阅此 StackOverflow 答案了解更多信息)。

\n\n

因此,要选择不同的项目背景,我们只需在dropDownListViewStyle中更改它(我还添加了分隔符):

\n\n
<style name="ListViewStyle" parent="@android:style/Widget.ListView">\n    <item name="android:listSelector">@drawable/selector_popup_menu_dropdown</item>\n    <item name="android:divider">@color/text_color_white</item>\n    <item name="android:dividerHeight">1dp</item>\n</style>\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

selecter_popup_menu_dropdown.xml

\n\n
<?xml version="1.0" encoding="utf-8"?>\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n

<item android:state_window_focused="false" android:drawable="@android:color/transparent" />\n\n<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->\n<item android:state_focused="true"  android:state_enabled="false" android:state_pressed="true" android:drawable="@color/gray_btn_bg_color" />\n<item android:state_focused="true"  android:state_enabled="false"                              android:drawable="@color/gray_btn_bg_color" />\n<item android:state_focused="true"                                android:state_pressed="true" android:drawable="@color/gray_btn_bg_color" />\n<item android:state_focused="false"                               android:state_pressed="true" android:drawable="@color/gray_btn_bg_color" />\n<item android:state_focused="true"                                                             android:drawable="@color/gray_btn_bg_color" />\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n

对于这种琐碎的事情来说,解释有点太长了,但我们还是坚持到了最后。耶!

\n