【问题标题】:Customizing popup menu style自定义弹出菜单样式
【发布时间】:2019-11-13 19:59:27
【问题描述】:

我目前正在为我的弹出菜单使用这种样式:

<style name="mainActivityTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="colorPrimary">@color/colorBlack</item>
    <item name="colorPrimaryDark">@color/colorBlack</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

它如何导致弹出菜单在顶部和底部有额外的空间:

如何做到没有多余的空间?是否有特定的样式来包装其内容?

编辑:我忘了提到我以编程方式膨胀视图,所以这可能是一个问题

private void inflateMoreMenu(View view){
        PopupMenu popupMenu = new PopupMenu(mContext, view);
        popupMenu.inflate(R.menu.popup_menu);
        popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {

                switch (item.getItemId()){
                    case R.id.popup_menu_report:
                        //Inflate a layout

                        break;
                    case R.id.popup_menu_block:
                        //Inflate a layout

                        break;

                }
                return false;
            }
        });

        @SuppressLint("RestrictedApi")
        MenuPopupHelper menuHelper = new MenuPopupHelper(mContext, (MenuBuilder) popupMenu.getMenu(), view);
        menuHelper.setForceShowIcon(true);
        menuHelper.show();
    }

popup_menu 的 XML:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/popup_menu_report"
        android:title="Report"
        android:icon="@drawable/icon_messages_report"/>

    <item
        android:id="@+id/popup_menu_block"
        android:title="Block"
        android:icon="@drawable/icon_alertdialog_block"/>

</menu>

【问题讨论】:

    标签: android android-styles popupmenu material-components material-components-android


    【解决方案1】:

    对于 OverflowMenu,您可以在应用主题中定义 actionOverflowMenuStyle 属性。

    <style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
       <item name="actionOverflowMenuStyle">@style/popupOverflowMenu</item>
    </style>
    

    与:

      <style name="popupOverflowMenu" parent="@style/Widget.MaterialComponents.PopupMenu.Overflow">
        <item name="android:popupBackground">@drawable/my_mtrl_popupmenu_background</item>   
      </style>
    

    drawable/my_mtrl_popupmenu_background.xml 文件:

    <shape xmlns:android="http://schemas.android.com/apk/res/android">
      <solid android:color="?attr/colorSurface"/>
    
      <corners
          android:bottomLeftRadius="4dp"
          android:bottomRightRadius="4dp"
          android:topLeftRadius="4dp"
          android:topRightRadius="4dp"/>
    
    </shape>
    

    原来的文件是padding:

    <shape xmlns:android="http://schemas.android.com/apk/res/android">
      <solid android:color="?attr/colorSurface"/>
    
      <corners
        ..../>
    
      <padding
          android:bottom="8dp"
          android:top="8dp"/>
    
    </shape>
    

    对于弹出窗口,您可以使用:

    <style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
       <item name="popupMenuStyle">@style/popupMenu</item>
    </style>
    
    <style name="popupMenu" parent="@style/Widget.MaterialComponents.PopupMenu">
        <item name="android:popupBackground">@drawable/my_mtrl_popupmenu_background</item>   
    </style>
    

    【讨论】:

    • 嗯,除非我将主要活动的主题更改为:@style/popup,否则它似乎不太适合我,但这会删除我的弹出菜单锚。我忘了提到我以编程方式膨胀菜单!
    • @davids。对不起这是我的错。我只想一个溢出菜单。我刚刚为一个简单的弹出窗口添加了样式。
    • 没问题!您的弹出窗口方法非常有效。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    相关资源
    最近更新 更多