重力如何影响Android中的PopupWindow.showAtLocation()

Android中不同的重力值如何影响PopupWindow.showAtLocation()?

我无法在PopupWindows showAtLocation和Gravity上find好的文档。

黑客攻击了几个小时后,尝试一些黑魔法math来计算中心,并尝试使用Gravity.TOPalignment视图,我发现一个使用Gravity.CENTER的post。 我在这里收集我的发现,希望能为别人节省一些痛苦。

popupWindow.showAtLocation(anyViewOnlyNeededForWindowToken, Gravity.CENTER, 0, 0); 

窗口令牌只需要视图,对位置没有其他影响。

重力告诉布局pipe理器在哪里开始坐标系,以及如何处理这些坐标。 我无法find文档,但黑客正在向我显示:

  • CENTER使用popup的中间alignment到指定的x,y。 所以0,0是屏幕居中的,没有调整通知栏的大小。

Gravity.CENTER 0,0

  • BOTTOM使用popup的底部与指定的x,yalignment。 所以0,0的popup底部与屏幕底部alignment。 如果你想要10px填充,那么y = 10(不是-10)将popup窗口向上移动10个像素。

重力。底部0,10

  • TOP使用popup窗口的顶部与指定的x,yalignment。 所以0,0的popup式顶部与屏幕顶部alignment。 如果你想要10px的填充,那么y = 10。 注意如果您不处于全屏模式,则还必须对通知栏进行调整。

Gravity.TOP 0,48

  • Gravity.LEFT和Gravity.RIGHT现在应该是显而易见的,对于我的示例图像来说,它们太大而不适合在屏幕上,所以它们被locking到屏幕大小减去我正在使用的填充。