69

ポップアップ画面のようDialogFragmentに表示する必要があります。Viewウィンドウは常に画面の中央に表示されます。DialogFragmentウィンドウの位置を設定する方法はありますか? ソースコードを調べましたが、まだ何も見つかりませんでした。

4

8 に答える 8

111

次のようなことを試してください:

@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 を呼び出した後、必ず位置を設定してください。

于 2012-04-24T07:41:46.003 に答える
5

次のように、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();
}
于 2016-07-16T06:36:49.070 に答える
4

getDialog().getWindow()ホスティング アクティビティが表示されない場合は null が返されるDialogFragmentため、フラグメント ベースのアプリを作成している場合には機能しません。を試すとgetWindow()が得られます。NullPointerExceptiongetAttributes()

Mobistryの回答をお勧めします。DialogFragment クラスが既にある場合は、切り替えるのはそれほど難しくありません。onCreateDialog メソッドを、PopupWindow を構築して返すメソッドに置き換えるだけです。AlertDialog.builder.setView()次に、提供したビューを再利用して、を呼び出すことができるはずです(PopupWindow object).showAtLocation()

于 2012-10-27T07:56:48.533 に答える
2

ビューの位置とサイズを指定できるため、この目的のために PopupWindow クラスを使用しています。

于 2012-08-02T21:03:58.713 に答える