ポップアップ画面のようDialogFragment
に表示する必要があります。View
ウィンドウは常に画面の中央に表示されます。DialogFragment
ウィンドウの位置を設定する方法はありますか? ソースコードを調べましたが、まだ何も見つかりませんでした。
8 に答える
次のようなことを試してください:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
getDialog().getWindow().setGravity(Gravity.CENTER_HORIZONTAL | Gravity.TOP);
WindowManager.LayoutParams p = getDialog().getWindow().getAttributes();
p.width = ViewGroup.LayoutParams.MATCH_PARENT;
p.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE;
p.x = 200;
...
getDialog().getWindow().setAttributes(p);
...
またはその他の方法getDialog().getWindow()
。
set-content を呼び出した後、必ず位置を設定してください。
次のように、DialogFragment で onResume() メソッドをオーバーライドする必要があります。
@Override
public void onResume() {
final Window dialogWindow = getDialog().getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.x = 100; // set your X position here
lp.y = 200; // set your Y position here
dialogWindow.setAttributes(lp);
super.onResume();
}
getDialog().getWindow()
ホスティング アクティビティが表示されない場合は null が返されるDialogFragment
ため、フラグメント ベースのアプリを作成している場合には機能しません。を試すとgetWindow()
が得られます。NullPointerException
getAttributes()
Mobistryの回答をお勧めします。DialogFragment クラスが既にある場合は、切り替えるのはそれほど難しくありません。onCreateDialog メソッドを、PopupWindow を構築して返すメソッドに置き換えるだけです。AlertDialog.builder.setView()
次に、提供したビューを再利用して、を呼び出すことができるはずです(PopupWindow object).showAtLocation()
。
ビューの位置とサイズを指定できるため、この目的のために PopupWindow クラスを使用しています。