use*_*152 5 android menuitem background-color
我正在尝试在按下时将背景颜色更改为菜单项.按下时更改背景颜色,但不更改颜色.
WHISED:
获得:
我可以做什么?谢谢

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)
回答有点晚,但找到了问题的解决方案。
\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>\nRun Code Online (Sandbox Code Playgroud)\n\npopupMenuStyle用于 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>\nRun Code Online (Sandbox Code Playgroud)\n\n还有textColor和dropDownSelector项,它们在我测试过的设备上没有执行任何操作,但我也在这里更改了这些项以防万一,因为父级 ( 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 答案了解更多信息)。
因此,要选择不同的项目背景,我们只需在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>\nRun Code Online (Sandbox Code Playgroud)\n\n有趣的部分是listSelector,它是所选项目的背景。如果我们只添加@color,那么所选项目将不会被正确地无效(即使您将选择移出它,它也会保持选中状态),为了使其正确而不是颜色,需要使用选择器:
\n\nselecter_popup_menu_dropdown.xml
\n\n<?xml version="1.0" encoding="utf-8"?>\nRun 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" />\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n对于这种琐碎的事情来说,解释有点太长了,但我们还是坚持到了最后。耶!
\n