如何在设备上使用Android> 4.0和硬件button在动作溢出菜单中设置文本样式?

我想为我的溢出菜单自定义背景和文字颜色。 它适用于没有硬件菜单button的设备,但我无法使用硬件菜单button对设备进行样式设置。 看截图:

来自Galaxy Nexus的支点Galaxy S3的屏幕截图

我正在使用这些样式:

<style name="Theme.settleup" parent="@style/Theme.Sherlock.Light.DarkActionBar"> <item name="android:popupMenuStyle">@style/settleup_PopupMenu</item> <item name="android:actionMenuTextColor">@android:color/white</item> </style> <style name="settleup_PopupMenu" parent="@style/Widget.Sherlock.ListPopupWindow"> <item name="android:popupBackground">@drawable/menu_dropdown_panel_settleup</item> </style> 

Solutions Collecting From Web of "如何在设备上使用Android> 4.0和硬件button在动作溢出菜单中设置文本样式?"

我已经看到了这个问题。 而且似乎没有办法改变用于Android> = 4.0设备的HW菜单键的选项菜单的textColor 。 甚至不改变主要,次要或第三种颜色影响文本的颜色。
我现在想到的唯一“解决scheme”就是使用javareflectionAPI。

但是,您可以将Android> = 4.0 HW键设备的底部选项菜单的背景与非HW键下拉菜单的背景分开设置。

您已经拥有非硬键下拉菜单的样式。 非HW键下拉菜单由android:popupMenuStyle (和popupMenuStyle )定义:

 <style name="Theme.settleup" parent="@style/Theme.Sherlock.Light.DarkActionBar"> <item name="android:popupMenuStyle">@style/settleup_PopupMenu</item> </style> 

但Android> = 4.0 HW键底部选项菜单的背景是使用android:panelBackground项目在主题中定义的:

 <style name="Theme.settleup" parent="@style/Theme.Sherlock.Light.DarkActionBar"> <item name="android:panelBackground">@drawable/mybackground</item> </style> 

由于它似乎是一个问题,改变Android> = 4.0 HW键设备上的底部选项菜单的文本颜色,我会build议离开这个部分到它的默认样式。

一直在AppCompat主题挖掘,但无论我尝试textColor保持白色。 我现在所做的就是像这样手动popup工具栏菜单:

 @Override public boolean onKeyUp(int keycode, KeyEvent e) { switch (keycode) { case KeyEvent.KEYCODE_MENU: if ( getSupportActionBar() != null ) { getSupportActionBar().openOptionsMenu(); return true; } } return super.onKeyUp(keycode, e); } 

菜单打开时按下菜单button魔法closures它。

谁还需要丑陋的黑底alignment菜单?

您可以按照以下方式在溢出MenuItem中应用样式和主题。 OverFlow Menu是ListView,所以我们可以按照listview的方式来应用主题。

在styles.xml中应用以下代码

 <style name="AppTheme" parent="@android:style/Theme.Holo.Light"> <item name="android:dropDownListViewStyle">@style/PopupMenuListView</item> <item name="android:actionBarWidgetTheme">@style/PopupMenuTextView</item> <item name="android:popupMenuStyle">@style/PopupMenu</item> <item name="android:listPreferredItemHeightSmall">40dp</item> </style> <!-- Change Overflow Menu ListView Divider Property --> <style name="PopupMenuListView" parent="@android:style/Widget.Holo.ListView.DropDown"> <item name="android:divider">@color/app_navigation_divider</item> <item name="android:dividerHeight">1sp</item> <item name="android:listSelector">@drawable/list_selector</item> </style> <!-- Change Overflow Menu ListView Text Size and Text Size --> <style name="PopupMenuTextView" parent="@android:style/Widget.Holo.Light.TextView"> <item name="android:textColor">@color/app_white</item> <item name="android:textStyle">normal</item> <item name="android:textSize">18sp</item> <item name="android:drawablePadding">25dp</item> <item name="android:drawableRight">@drawable/navigation_arrow_selector</item> </style> <!-- Change Overflow Menu Background --> <style name="PopupMenu" parent="android:Widget.Holo.Light.ListPopupWindow"> <item name="android:popupBackground">@drawable/menu_overflow_bg</item> </style> 

对于AppCompat主题:

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="actionBarPopupTheme">@style/HardwareOptionMenu</item> </style> <style name="HardwareOptionMenu" parent="ThemeOverlay.AppCompat.Dark"> <item name="android:textColorSecondary">@color/white</item> <item name="android:colorBackground">@color/black</item> </style> 

尝试添加没有android前缀的项目

 <style name="Theme.settleup" parent="@style/Theme.Sherlock.Light.DarkActionBar"> <item name="android:popupMenuStyle">@style/settleup_PopupMenu</item> <item name="popupMenuStyle">@style/settleup_PopupMenu</item> <item name="android:actionMenuTextColor">@android:color/white</item> <item name="actionMenuTextColor">@android:color/white</item> </style> <style name="settleup_PopupMenu" parent="@style/Widget.Sherlock.ListPopupWindow"> <item name="android:popupBackground">@drawable/menu_dropdown_panel_settleup</item> <item name="popupBackground">@drawable/menu_dropdown_panel_settleup</item> </style> 

如果你真的必须从正确的图片改变菜单的文本颜色,你可以做什么,可以是下面的“黑客”:

 SpannableStringBuilder text = new SpannableStringBuilder(); text.append("MenuItem1"); text.setSpan(new ForegroundColorSpan(Color.WHITE), 0, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); menu.add(Menu.NONE, MENU_ITEM_1, Menu.NONE, null).setTitle(text); 

我同意这不是最干净的方式(我会说这是相当丑陋的,因为你必须注意在每个活动中,你有这样一个菜单,每个菜单项的标题需要改变使用这个逻辑),但这是显示预期结果。 让我知道,如果它帮助你。

干杯!