2

在我显示多个片段(例如列表片段和详细信息片段)并且其中一个片段显示警报对话框(DialogFrament)的场景中,我希望对话框位于片段的中心显示它,而不是在整个屏幕中居中。有没有办法在没有涉及屏幕尺寸、片段尺寸和位置等的大量像素计算的情况下做到这一点?

4

1 回答 1

3

正如 Joe Simpson 所提到的,您可以使用 FrameLayout 来做到这一点。假设您要将对话片段放在您提到的详细信息片段的顶部。在活动布局中的详细信息片段周围放置一个 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 上的文档说可以像这样嵌入它:“如果需要,DialogFragment 仍然可以选择性地用作普通片段。如果您有一个片段在某些情况下应该显示为对话框并且其他嵌入在更大的 UI 中。”

于 2013-02-27T07:44:17.610 回答