Android 如何确定 PopupMenu 小部件的尺寸?
How are the dimensions of PopupMenu widget determined by Android?
众所周知,PopupMenu 很难进行自定义,因此我将其中一个 PopupMenus 切换为 ListWindowMenu。后者允许您使用自己的适配器和布局。
我的问题是我需要重新创建 PopupMenu 的大小,但我不确定如何取回它。没有定义布局,它似乎以某种方式自行调整大小。我查看了 PopupMenu 和 Menu,但找不到它们如何调整自身大小以及如何获取尺寸。
有谁知道
1) 如何获取弹出菜单的尺寸
2) 这些 android 小部件如何调整自身大小?
PopupMenu
在底层其实是一个ListPopupWindow
,其中包含DropDownListView
.
DropDownListView
是 ListView
的 child,所以他有一个 适配器 。
如您所知,每个适配器都有 getView()
方法,它会膨胀资源以显示每个项目。
所以,你的答案是:
height = com.android.internal.R.layout.popup_menu_item_layout * items_count.
width = dynamically measured value but it can not be bigger than :
Math.max(res.getDisplayMetrics().widthPixels / 2, res.getDimensionPixelSize(com.android.internal.R.dimen.config_prefDialogWidth));
测量逻辑你可以看到here。
众所周知,PopupMenu 很难进行自定义,因此我将其中一个 PopupMenus 切换为 ListWindowMenu。后者允许您使用自己的适配器和布局。
我的问题是我需要重新创建 PopupMenu 的大小,但我不确定如何取回它。没有定义布局,它似乎以某种方式自行调整大小。我查看了 PopupMenu 和 Menu,但找不到它们如何调整自身大小以及如何获取尺寸。
有谁知道 1) 如何获取弹出菜单的尺寸 2) 这些 android 小部件如何调整自身大小?
PopupMenu
在底层其实是一个ListPopupWindow
,其中包含DropDownListView
.
DropDownListView
是 ListView
的 child,所以他有一个 适配器 。
如您所知,每个适配器都有 getView()
方法,它会膨胀资源以显示每个项目。
所以,你的答案是:
height = com.android.internal.R.layout.popup_menu_item_layout * items_count.
width = dynamically measured value but it can not be bigger than :
Math.max(res.getDisplayMetrics().widthPixels / 2, res.getDimensionPixelSize(com.android.internal.R.dimen.config_prefDialogWidth));
测量逻辑你可以看到here。