Android PopupMenu剪裁到ActionBar的边界

时间:2015-11-05 09:48:07

标签: android popupmenu

我正在尝试在Android应用程序中创建PopupMenu。由于应用程序的主窗口仅使用最少的Android布局元素(实际上它是一个大图形),我在主Activity中使用以下代码:

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()报告的值时,我得到的东西接近我的设备的屏幕尺寸(高度因ActionBar可见性而异),表明我正在处理占据大部分屏幕的视图。

我尝试过引力(例如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的整个高度上延伸,并且总是在底端被剪裁。

是什么给出了?

1 个答案:

答案 0 :(得分:0)

我想我找到了这种行为的可能原因。显然,PopupMenu从不阻碍其相关的View。因为在我的情况下,关联的View占用整个空间,所以只留下菜单的ActionBar。隐藏操作栏后,无法放置菜单。

因此,解决方案是创建一个虚拟视图作为菜单的锚点。这有两种可能性:

  • 透明视图浮动在主视图的顶部。这样可以将菜单放置在主视图的几乎任何位置,唯一的限制是它无法与顶部或底部边缘对齐(因为锚点会将其与边缘分开)。

  • 高度或宽度为零的视图,位于主视图的边缘。这会将菜单与相应的边缘对齐。使用Gravity,菜单可以放在主视图的一角。虽然我不确定Android是否允许视图的尺寸为零。

我需要做更多测试才能找到答案。

相关问题