android PopupMenu showAtLocation y offset

时间:2017-08-29 02:40:06

标签: android popupwindow

有人知道我使用此代码时的原因:

popupMenu.showAtLocation(containerView, Gravity.BOTTOM|Gravity.LEFT, x_offset, y_offset);

y偏移实际上不会移动弹出窗口,直到它大于某个数字(在这种情况下大约为120)。对于120以下的值,没有任何反应;对于超过120的值,弹出窗口会垂直向上移动。

我猜测它与弹出窗口的大小有关,因为似乎没有办法真正获得尺寸来补偿这个阈值。

我想知道因为a)关于这种方法的信息很少,而b)我似乎无法正确定位弹出窗口。

2 个答案:

答案 0 :(得分:1)

很老的问题,但我想在这里提一下,如果其他人想知道 yOffset 的阈值是多少 - 它是您传递给 showAtLocation() 方法的视图的顶部插入。 在大多数情况下,这是您的系统栏高度。

您可以尝试通过

计算yOffset
int desiredOffsetPx = 250;
int yOffset = desiredOffsetPx + systemWindowInsetTop
popupWindow.showAtLocation(view, Gravity.BOTTOM, 0, yOffset)

要获得systemWindowInsetTop,请检查此answer

答案 1 :(得分:0)

void showAtLocation (View parent, 
            int gravity, 
            int x, 
            int y)

在指定位置的弹出窗口中显示内容视图。如果弹出窗口无法适合屏幕,则会对其进行剪裁。有关重力和x和y参数如何相关的更多信息,请参阅WindowManager.LayoutParams。指定NO_GRAVITY的重力类似于指定Gravity.LEFT | Gravity.TOP。

您可以在此链接中找到完整的详细信息:deveoper.android.com