Android Menuitem 各种坑

作者: phantomvk | 来源:发表于2016-12-30 09:31 被阅读1314次

    ToolBar上添加Menu,除搜索图标外其他的都收起来。修改ToolBar背景色为深灰色,然后才发现MenuItem里面的背景色还是原来白色。

    修改颜色后,ToolBar为深灰,有搜索和菜单图标

    ToolBar

    打开菜单后

    打开后的ToolBar

    修改MenuItem背景颜色

    原来res/values/styles.xml的配置

    <resources>
        <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
            <item name="colorPrimary">@color/colorWeChatGray</item>
            <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
            <item name="colorAccent">@color/colorAccent</item>
        </style>
    </resources>
    

    修改后

    <resources>
        <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
            <item name="colorPrimary">@color/colorWeChatGray</item>
            <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
            <item name="colorAccent">@color/colorAccent</item>
            <item name="actionOverflowMenuStyle">@style/optionMenu</item>
        </style>
    
        <style name="optionMenu" parent="Widget.AppCompat.ActionBar.Overflow">
            <item name="android:popupBackground">@color/colorWeChatGray</item>
        </style>
    </resources>
    

    这样MenuItem的背景颜色就修改了

    背景色修改

    但这看起来明显不对劲:

    • 菜单把ToolBar的两个图标遮住
    • 背景色改变后和文字颜色不协调

    修改文字颜色

    我们先处理文字的颜色,添加android:textColor和对应的颜色即可

    <resources>
        <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
            <!-- Customize your theme here. -->
            <item name="colorPrimary">@color/colorWeChatGray</item>
            <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
            <item name="colorAccent">@color/colorAccent</item>
            <item name="actionOverflowMenuStyle">@style/optionMenu</item>
            <item name="android:textColor">@color/colorWhite</item>
        </style>
    
        <style name="optionMenu" parent="Widget.AppCompat.ActionBar.Overflow">
            <item name="android:popupBackground">@color/colorWeChatGray</item>
        </style>
    </resources>
    
    修改文字颜色

    遮蔽ToolBar图标

    遮蔽图标的问题比较好解决,
    parent="Widget.AppCompat.ActionBar.Overflow">.Overflow去掉

    处理遮蔽

    MenuItem图标显示

    上面的图片中MenuItem的Icon本来是不显示的,需要加入以下代码。在Android 5.0手机上测试可以用,Android 4.4及之前的还不清楚。

    @Override
    protected boolean onPrepareOptionsPanel(View view, Menu menu) {
        if (menu != null) {
            if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
                try{
                    Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
                    m.setAccessible(true);
                    m.invoke(menu, true);
                } catch (Exception e) {
                    Log.e(getClass().getSimpleName(), "onMenuOpened Exception", e);
                }
            }
        }
        return super.onPrepareOptionsPanel(view, menu);
    }
    

    相关文章

      网友评论

      本文标题:Android Menuitem 各种坑

      本文链接:https://www.haomeiwen.com/subject/bdqmvttx.html