web-dev-qa-db-ja.com

Android-特定のビューの上にあるPopupWindow

Androidのアプリケーションを開発しています。ユーザーが画面の下部にある特定のメニューバーオブジェクト(水平方向に並んだ小さな画像で構成されています)をクリックすると、ポップアップウィンドウが使用されます。

クリックすると、クリックされたビューの左上隅にポップアップウィンドウが固定され、上部に表示されます。

関連すると思われる唯一のメソッドは、showAsDropDown(View anchor、int xoff、int yoff)showAtLocation(View parent、int gravity、int x、int y)です。 showAsDropDownの問題は、ビューの左下隅に固定されていることです。

これを実装する別の方法はありますか?

24
Matt

popupWindow.showAtLocation(...)は、実際にはscreen(アプリケーションでもない)に絶対に配置されたウィンドウを表示します。その呼び出しのアンカーは、そのウィンドウトークンにのみ使用されます。座標は、指定された重力からのオフセットです。

あなたが実際に使いたいのは:

popupWindow.showAsDropDown(anchor, offsetX, offsetY, gravity);

この呼び出しはAPI 19+でのみ使用できるため、以前のバージョンでは次を使用する必要があります。

popupWindow.showAsDropdown(anchor, offsetX, offsetY);

これらの呼び出しは、指定されたアンカービューに関連するポップアップウィンドウを表示します。デフォルトの重力は(重力を指定せずに呼び出した場合)Gravity.TOP|Gravity.STARTであるため、アプリのさまざまな場所でGravity.LEFTを明示的に使用している場合、時間がかかります。

36
William
popupWindow.showAtLocation(anchor, Gravity.BOTTOM, 0, anchor.getHeight());
7
farhan latheef

使用したいのはshowAtLocation(...)です。アンカービュー(ユーザーがクリックするビュー)を指定し、gravityパラメーターとオフセットを介してアンカービューに相対的に配置します。 gravityのようなPopupWindowパラメーターは、ほとんど子ビューに似ており、親ビューはコンテナーレイアウトに似ています。

Gravity.LEFT | Gravity.TOPをパラメーターとして。

6
Wenger

showAsDropDown(View anchor、int xoff、int yoff)構文のyoffパラメーターを使用して、アンカーの高さだけpopupWindowを移動する必要がありました。

popupWindow.showAsDropDown(anchor, 0, -anchor.getHeight()+popupView.getHeight);

また、アンカーに許可された最大の高さが変換を許可しない場合、ポップアップが適切に表示されない可能性があることに注意してください。

5

私はこのコードを持っています:すべてのSDKバージョンの特定のビュー(重力終了)の下のPopupWindow。

        // display the popup[![enter image description here][1]][1]
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KitKat) {
            mPopupWindow.showAsDropDown(v, 0, 0, Gravity.END);
        } else {
            mPopupWindow.showAsDropDown(v, v.getWidth() - mPopupWindow.getWidth(), 0);
        }

ここで、View vはImageButtonカレンダーです。

5
Ho Luong

次の方法で、常にアンカーの上にポップアップを表示できます

popupWindow.showAsDropDown(anchor, 0, -anchor.getHeight()-popupView.getHeight);
3
winit mazhar

popupwindow.showAsDropDown(anchor、0、-125);このことは私のために働く

0
Vishal Mokal