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

Dav*_*vra 28 android menu android-actionbar drop-down-menu

我想为我的溢出菜单自定义背景和文字颜色.没有硬件菜单按钮的设备可以正常工作,但我无法使用硬件菜单按钮设置设备样式.查看截图:

来自Galaxy Nexus的Screnshot 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>
Run Code Online (Sandbox Code Playgroud)

Tom*_*mik 25

我调查了这个问题.似乎没有办法改变textColorAndroid> = 4.0设备的选项菜单和硬件菜单键.甚至不改变主要,次要或第三颜色会影响文本颜色.
我现在想到的唯一"解决方案"是使用java反射API.

但是,您可以将Android> = 4.0 HW键设备的底部选项菜单的背景与非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>
Run Code Online (Sandbox Code Playgroud)

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

<style name="Theme.settleup" parent="@style/Theme.Sherlock.Light.DarkActionBar">
    <item name="android:panelBackground">@drawable/mybackground</item>
</style>
Run Code Online (Sandbox Code Playgroud)

由于在Android> = 4.0 HW密钥设备上更改底部选项菜单的文本颜色似乎是一个问题,我建议将此部分保留为其默认样式.


Eri*_*ers 6

正在挖掘AppCompat主题,但无论我尝试了什么textColor仍然是白色的.我现在所做的只是手动弹出工具栏菜单,如下所示:

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

菜单打开时按菜单按钮可以关闭它.

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


Tej*_*hta 5

您可以按如下方式在 Overflow 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>
Run Code Online (Sandbox Code Playgroud)