如何更改弹出菜单中项目之间的边距
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 视图屏幕的左上角显示弹出窗口,您可以尝试一些迭代,以根据需要在屏幕上的位置显示
希望对您有所帮助!
我想在 android
的弹出菜单中更改项目之间的 spacespace 我的意思是这个:
我希望有一个直接的解决方案,但据我所知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 视图屏幕的左上角显示弹出窗口,您可以尝试一些迭代,以根据需要在屏幕上的位置显示
希望对您有所帮助!