我想在Android应用程序中创建一个PopupMenu。因为该应用程序的主窗口使得只有极少使用的Android布局元素(基本上是一个大的图形),我使用在主活动以下代码的:Android PopupMenu剪辑到ActionBar的边界
public void showMenu() {
View v = this.getCurrentFocus();
PopupMenu popup = new PopupMenu(this, v);
this.prepareMenu(popup.getMenu()); // populate menu with items
popup.show();
}
的方法被调用时用户触摸屏幕的特定区域。
该菜单显示在ActionBar的顶部,但不会超出其界限。我可以通过菜单滚动(因此项目在那里),但我无法弄清楚如何让菜单超出ActionBar的边界。
该应用程序有一个全屏模式,它隐藏了ActionBar。当我这样做时,菜单根本不显示。日志输出显示showMenu()
在第一次触摸时会被调用,但不会在第二次触摸时被调用,表示菜单确实打开,尽管隐藏或不在屏幕上,并在第二次触摸时被解散。
当我检查由v.getMeasuredHeight()
和v.getMeasuredWidth()
报告的值,我得到的东西接近我的设备的屏幕尺寸(高度取决于动作条可见性),这表明我处理占据了屏幕的大部分景色。
我已经尝试过用重力来修补(如PopupMenu popup = new PopupMenu(this, v, Gravity.RIGHT | Gravity.TOP | Gravity.FILL_VERTICAL);
),但无济于事。我可以将菜单位置从左上角切换到右上角,但大小始终相同。
我还试图获得以锚定菜单的各种方式,如
Window window = this.getWindow();
while ((window != null) && (window.getContainer() != null))
window = window.getContainer();
View v = window.getDecorView();
但唯一不同的是,对于一些意见菜单没有显示在所有。当它这样做时,它总是延伸到ActionBar的整个高度,并始终在最下端剪切。
什么给?
原来,有一种更简单的方法来实现我想要的 - 特别是显示选项菜单。我没有创建一个具有相同内容的弹出菜单,而是我可以简单地从Activity中调用'openOptionsMenu()'。菜单将显示在默认位置,这对我来说可以,并且可能会沿着整个屏幕高度(不包括系统栏)进行扩展。 – user149408