Android 如何确定 PopupMenu 小部件的尺寸?

How are the dimensions of PopupMenu widget determined by Android?

众所周知,PopupMenu 很难进行自定义,因此我将其中一个 PopupMenus 切换为 ListWindowMenu。后者允许您使用自己的适配器和布局。

我的问题是我需要重新创建 PopupMenu 的大小,但我不确定如何取回它。没有定义布局,它似乎以某种方式自行调整大小。我查看了 PopupMenu 和 Menu,但找不到它们如何调整自身大小以及如何获取尺寸。

有谁知道 1) 如何获取弹出菜单的尺寸 2) 这些 android 小部件如何调整自身大小?

PopupMenu在底层其实是一个ListPopupWindow,其中包含DropDownListView.

DropDownListViewListView 的 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