0

私は使用できることを知っています:

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 が画面の外にある場合は、自動的に右/上辺 (画面の外にある側) の境界に配置されます。

4

1 に答える 1

0

ポップアップ ウィンドウのonMeasureメソッドをオーバーライドすることで、ポップアップ ウィンドウのサイズを取得できます (これを行うには View をサブクラス化する必要があることに注意してください)。その後、x 座標と y 座標のオフセットを計算できます。お役に立てれば。

于 2014-07-24T11:54:24.413 に答える