Androidのアプリケーションを開発しています。ユーザーが画面の下部にある特定のメニューバーオブジェクト(水平方向に並んだ小さな画像で構成されています)をクリックすると、ポップアップウィンドウが使用されます。
クリックすると、クリックされたビューの左上隅にポップアップウィンドウが固定され、上部に表示されます。
関連すると思われる唯一のメソッドは、showAsDropDown(View anchor、int xoff、int yoff)とshowAtLocation(View parent、int gravity、int x、int y)です。 showAsDropDownの問題は、ビューの左下隅に固定されていることです。
これを実装する別の方法はありますか?
popupWindow.showAtLocation(...)
は、実際にはscreen(アプリケーションでもない)に絶対に配置されたウィンドウを表示します。その呼び出しのアンカーは、そのウィンドウトークンにのみ使用されます。座標は、指定された重力からのオフセットです。
あなたが実際に使いたいのは:
popupWindow.showAsDropDown(anchor, offsetX, offsetY, gravity);
この呼び出しはAPI 19+でのみ使用できるため、以前のバージョンでは次を使用する必要があります。
popupWindow.showAsDropdown(anchor, offsetX, offsetY);
これらの呼び出しは、指定されたアンカービューに関連するポップアップウィンドウを表示します。デフォルトの重力は(重力を指定せずに呼び出した場合)Gravity.TOP|Gravity.START
であるため、アプリのさまざまな場所でGravity.LEFT
を明示的に使用している場合、時間がかかります。
popupWindow.showAtLocation(anchor, Gravity.BOTTOM, 0, anchor.getHeight());
使用したいのはshowAtLocation(...)
です。アンカービュー(ユーザーがクリックするビュー)を指定し、gravity
パラメーターとオフセットを介してアンカービューに相対的に配置します。 gravity
のようなPopupWindow
パラメーターは、ほとんど子ビューに似ており、親ビューはコンテナーレイアウトに似ています。
Gravity.LEFT | Gravity.TOP
をパラメーターとして。
showAsDropDown(View anchor、int xoff、int yoff)構文のyoffパラメーターを使用して、アンカーの高さだけpopupWindowを移動する必要がありました。
popupWindow.showAsDropDown(anchor, 0, -anchor.getHeight()+popupView.getHeight);
また、アンカーに許可された最大の高さが変換を許可しない場合、ポップアップが適切に表示されない可能性があることに注意してください。
私はこのコードを持っています:すべての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カレンダーです。
次の方法で、常にアンカーの上にポップアップを表示できます
popupWindow.showAsDropDown(anchor, 0, -anchor.getHeight()-popupView.getHeight);
popupwindow.showAsDropDown(anchor、0、-125);このことは私のために働く