2

複数のフラグメント(リストフラグメントや詳細フラグメントなど)が表示されていて、フラグメントの1つにアラートダイアログ(DialogFrament)が表示されているシナリオでは、ダイアログをフラグメント内の中央に配置する必要があります。画面全体の中央に表示されるのではなく、表示されます。画面の寸法、フラグメントの寸法と位置などを含む多くのピクセル計算なしでそれを行う方法はありますか?

4

1 に答える 1

3

Joe Simpson が言及しているように、FrameLayout を使用してこれを行うことができます。メンションした Details フラグメントの上にダイアログ フラグメントを配置したいとします。アクティビティ レイアウトの詳細フラグメントの周りに FrameLayout を配置し、FrameLayout 内にもダイアログ フラグメントを埋め込みます (layout_gravity="center" を使用)。必要になるまで、 visibility="gone" を設定してください。例えば:

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent" >

                <fragment
                    android:id="@+id/my_details_fragment"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    class="com.my.fragment.DetailsFragment" />

                <fragment
                    android:id="@+id/my_dialog_fragment"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    class="com.my.fragment.DialogFragment"
                    android:layout_gravity="center" />
            </FrameLayout>

プログラムで起動することもできます。xml にホルダー ビュー (LinearLayout など) を配置します。

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent" >

                <fragment
                    android:id="@+id/my_details_fragment"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    class="com.my.fragment.DetailsFragment" />

                <LinearLayout
                    android:id="@+id/myfragment"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center" />
            </FrameLayout>

...そして、次のようにコードに置き換えます。

            final MyDialogFragment dialog = MyDialogFragment.getInstance();

            // get an instance of FragmentTransaction from your Activity
            FragmentTransaction fragmentTransaction = getSupportFragmentManager()
                    .beginTransaction();
            fragmentTransaction.add(R.id.myfragment, dialog);
            fragmentTransaction.commit();

DialogFragment のドキュメントには、次のように埋め込んでも問題ないと書かれていることに注意してください。他のものはより大きな UI に埋め込まれています。」

于 2013-02-27T07:44:17.610 に答える