打开PopupWindow并从RightTop绘图到LeftBottom,而不是LeftTop到RightBottom

时间:2014-07-24 11:37:30

标签: android android-layout point popupwindow android-popupwindow

我知道我可以使用:

myPopup.showAtLocation(layout, Gravity.NO_GRAVITY, x, y);
// OR
myPopup.showAtLocation(layout, Gravity.TOP|Gravity.LEFT, x, y);

打开一个从[x,y]绘制的PopupWindow作为PopupWindow的左上角,向右下方绘制。

然而,我想要的是从[x,y]作为PopupWindow的右上角绘制,向左下方绘制。

这是一张让它更清晰的图片(点是我的[x,y]位置,矩形是我的PopupWindow。第一张图片显示了它是如何正常完成的,第二张是我想要实现的。) : enter image description here

那么在知道黑点的位置的同时,如何正确计算第二张图片的灰点位置的x和y?我知道y可以保持不变,但x应该改为:

  • x减去PopupWindow-width

问题是PopupWindow的宽度和高度都设置为wrap_content,所以在我绘制它之前我不知道它的大小。

这是否意味着我必须绘制它(但首先使它不可见),然后用它的ViewTreeObserver的OnGlobalLayoutListener中的PopupWindow的MeasuredWidth计算新的x(知道它何时完成渲染并且MeasuredWidth是已知的),然后应用此新的x然后让它可见?或者是否有更简单的方法让它在正确的位置绘制?

PS:我也将Gravity.NO_GRAVITY更改为Gravity.TOP|Gravity.RIGHT,如果PopupWindow不在屏幕上,它会自动将其放置在右侧/顶部边框(无论哪一侧出于屏幕)。

1 个答案:

答案 0 :(得分:0)

您可以通过覆盖弹出窗口的onMeasure方法来获取弹出窗口的大小(请注意,为了执行此操作,您必须子类化View)。之后,您可以计算x和y坐标的偏移量。希望这会有所帮助。