如何在片段中居中对话框?

时间:2012-06-29 20:14:07

标签: android android-fragments android-alertdialog

在我显示多个片段的情况下(例如列表片段和细节片段),其中一个片段显示警告对话框(DialogFrament),我希望对话框在显示它的片段,不在整个屏幕的中心。如果没有涉及屏幕尺寸,片段尺寸和位置等的大量像素计算,有没有办法做到这一点?

1 个答案:

答案 0 :(得分:3)

你可以通过使用FrameLayout来实现这一点,正如Joe Simpson所提到的那样。假设您要将对话框片段放在您提到的Details片段的顶部。将FrameLayout放在活动布局中的细节片段周围,然后将对话框片段嵌入到FrameLayout中(使用layout_gravity =“center”)。在您需要之前设置visibility =“gone”。 E.g:

            <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>

您也可以通过编程方式启动它。将持有者视图(例如LinearLayout)放在xml:

            <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();

请注意,docs on DialogFragment表示可以这样嵌入它:“如果需要,DialogFragment仍然可以选择用作正常片段。如果你有一个片段,在某些情况下应该是显示为对话框,其他嵌入在更大的UI中。“