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>
还有 textColor 和 dropDownSelector 项目,它们在我测试过的设备上没有做任何事情,但我也在这里更改这些以防万一,因为父 ( 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:按下菜单项时的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章