如何更改弹出菜单中项目之间的边距

how to change margin between items in popupmenu

我想在 android

的弹出菜单中更改项目之间的 space

space 我的意思是这个:

我希望有一个直接的解决方案,但据我所知android它不会那么简单

无论如何,我还想设置弹出窗口的 maxHeight... 在这种情况下,弹出窗口由 TextView "Select the prize" 锚定,因此它会填充其上方的 space,但并非所有项目都适合 space,因此 android 会自动创建滚动视图(垂直)

事实是,我知道 100% 的用户不会使用此卷轴,所以我下面 "Travel" 菜单中的项目将永远不会被看到。

如何设置高度才能使所有项目都足够space?

=============更新================

澄清一下,这不是微调器,而是弹出菜单

this.popupCategories = new PopupMenu(this, this.categoryLabel);
for (Giveaway.GiveawayCategoryGroup catGroup : categoryGroups) {

            SubMenu submenu = this.popupCategories.getMenu().addSubMenu(catGroup.getDescription(lang));
            for (Giveaway.GiveawayCategory cat : (Collection<? extends Giveaway.GiveawayCategory>) catGroup.getCategories()) {
                if (cat.isActive())
                    submenu.add(Menu.NONE, cat.getValue().hashCode(), (int) cat.getOrder(), cat.getDescription(lang));
            }
        }

PopupMenu 项目只是常规 MenuItem;它是相同的属性,但是另一个父样式:

<style name="customPopupMenuStyle" parent="@android:style/Widget.PopupMenu">
    <item name="android:listPreferredItemHeightSmall">32dp</item>
</style>

这只会影响已分配样式的 PopupMenu

也可以设置自定义 ActionView(每个单独的项目,而不是作为模板):

MenuItem item = menu.findItem(R.id.itemMenu);
MenuItemCompat.setActionView(item, R.layout.layout_menu);

您需要在您的 AppTheme 里面设置您喜欢的项目行高 styles.xml:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:listPreferredItemHeightSmall">20dp</item>
</style>

您可能需要稍微修改此数字以获得正确的值,但它决定了这些行的高度。确保将 Theme.AppCompat.Light.DarkActionBar 替换为您当前使用的任何内容。

至于设置最大高度,恐怕您必须为此创建自己的扩展程序 class,如 in this example

您可以为弹出菜单创建布局并在 activity 中初始化它,如下所示 XML

> <?xml version="1.0" encoding="utf-8"?> <LinearLayout
> xmlns:android="http://schemas.android.com/apk/res/android"
>     android:layout_width="match_parent"
>     android:layout_height="match_parent"
>     android:gravity="center"
>     android:background="@android:color/transparent">
>     <LinearLayout
>         android:layout_width="wrap_content"
>         android:layout_height="YOUR MAX HEIGHT"
>         android:gravity="center"
>         android:weightsum="YOUR NUMBER OF ITEMS"
>         android:orientation="vertical"
>         android:layout_gravity="center"
>         >
>         <TextView
>             android:layout_width="wrap_content"
>             android:layout_height="0dp"
>             android:weight="1" /> ...no of views items
>     </LinearLayout> </LinearLayout>

初始化为

View parentv = findViewById(R.id.activityview); //id of parent view of activity in which popup will be shown
LayoutInflater layoutInflater
                = (LayoutInflater) getBaseContext()
                .getSystemService(LAYOUT_INFLATER_SERVICE);
        View popupView = layoutInflater.inflate(R.layout.YOURPOPUPMENU, null);
        final PopupWindow popupWindow = new PopupWindow(
                popupView,
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.MATCH_PARENT);
        TextView tv = popupView.findViewById(R.id.textviewid); //to do something with textview
        tv.setText("Fashion");
        popupWindow.setOutsideTouchable(true); //if you want to dismiss popup if clicked outside
        popupWindow.setFocusable(true);
        // Removes default background.
        popupWindow.setBackgroundDrawable(new android.graphics.drawable.ColorDrawable(android.graphics.Color.TRANSPARENT));
//        popupWindow.setAnimationStyle(R.style.righttoleftstyle); can put animation to slide in popupmenu by defining any animation
        popupWindow.showAtLocation(parentv, Gravity.START | Gravity.TOP,0,0);

// 将在 activity 视图屏幕的左上角显示弹出窗口,您可以尝试一些迭代,以根据需要在屏幕上的位置显示

希望对您有所帮助!