有人知道我使用此代码时的原因:
popupMenu.showAtLocation(containerView, Gravity.BOTTOM|Gravity.LEFT, x_offset, y_offset);
y偏移实际上不会移动弹出窗口,直到它大于某个数字(在这种情况下大约为120)。对于120以下的值,没有任何反应;对于超过120的值,弹出窗口会垂直向上移动。
我猜测它与弹出窗口的大小有关,因为似乎没有办法真正获得尺寸来补偿这个阈值。
我想知道因为a)关于这种方法的信息很少,而b)我似乎无法正确定位弹出窗口。
答案 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