私は使用できることを知っています:
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 です。最初の図は通常の方法を示し、2 番目の図は私が達成したいことです):
では、黒い点の位置がわかっているときに、2 番目の画像の灰色の点の位置の x と y を正しく計算するにはどうすればよいでしょうか。y は同じままでもかまいませんが、x は次のように変更する必要があります。
- x から PopupWindow の幅を引いた値
問題は、PopupWindow の幅と高さが両方とも に設定されてwrap_content
いるため、描画するまでサイズがわからないことです。
これは、描画する必要があることを意味しますか (ただし、最初は非表示にします)、ViewTreeObserver の OnGlobalLayoutListener で PopupWindow の MeasuredWidth を使用して新しい x を計算し (レンダリングが完了し、MeasuredWidth がわかっているときを知るため)、この新しい x を適用し、次に、それを表示しますか?または、正しい位置に描画させる簡単な方法はありますか?
PS: にも変更Gravity.NO_GRAVITY
しましGravity.TOP|Gravity.RIGHT
た。PopupWindow が画面の外にある場合は、自動的に右/上辺 (画面の外にある側) の境界に配置されます。