我知道我可以使用:
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。第一张图片显示了它是如何正常完成的,第二张是我想要实现的。) :
那么在知道黑点的位置的同时,如何正确计算第二张图片的灰点位置的x和y?我知道y可以保持不变,但x应该改为:
问题是PopupWindow的宽度和高度都设置为wrap_content
,所以在我绘制它之前我不知道它的大小。
这是否意味着我必须绘制它(但首先使它不可见),然后用它的ViewTreeObserver的OnGlobalLayoutListener中的PopupWindow的MeasuredWidth计算新的x(知道它何时完成渲染并且MeasuredWidth是已知的),然后应用此新的x然后让它可见?或者是否有更简单的方法让它在正确的位置绘制?
PS:我也将Gravity.NO_GRAVITY
更改为Gravity.TOP|Gravity.RIGHT
,如果PopupWindow不在屏幕上,它会自动将其放置在右侧/顶部边框(无论哪一侧出于屏幕)。
答案 0 :(得分:0)
您可以通过覆盖弹出窗口的onMeasure方法来获取弹出窗口的大小(请注意,为了执行此操作,您必须子类化View)。之后,您可以计算x和y坐标的偏移量。希望这会有所帮助。