android - 如何将对话框置于 fragment 中心?

标签 android android-fragments android-alertdialog

在显示多个 fragment (例如列表 fragment 和详细 fragment )并且其中一个 fragment 显示警报对话框(DialogFrament)的情况下,我希望该对话框位于显示它的 fragment ,不在整个屏幕的中心。有没有一种方法可以做到这一点,而无需进行大量涉及屏幕尺寸、 fragment 尺寸和位置等的像素计算?

最佳答案

正如 Joe Simpson 提到的,您可以使用 FrameLayout 来做到这一点。假设您想将对话框 fragment 放在您提到的详细信息 fragment 的顶部。在 Activity 布局中的详细信息 fragment 周围放置一个 FrameLayout,然后将对话框 fragment 也嵌入到 FrameLayout 中(layout_gravity="center")。设置可见性=“消失”直到你需要它。例如:

            <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 中放置一个 Holder View (例如 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();

请注意 docs on DialogFragment说可以像这样嵌入它:“如果需要,DialogFragment 仍然可以选择用作普通 fragment 。如果您有一个 fragment 在某些情况下应显示为对话框而其他 fragment 应嵌入更大的 UI 中,则这非常有用”

关于android - 如何将对话框置于 fragment 中心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11268381/

相关文章:

Android:R.id.class.getFields() 的 "class"是什么?

Android - 在寻呼机中获取 fragment 的上下文

android - 如何在约束布局中创建水平 ScrollView

java - Android 抽屉布局显示在 fragment 内容下

AlertDialog 中的 Android 选项卡

android - 如何从另一个类显示警报对话框并在当前 Activity 中处理它(Android)

java - 闹钟管理器 日历

android - Android 中有效的谷歌帐户 OAuth 2 token

android - 如何让 adb shell ps 列出 Android O 中的所有进程?

android - 如何在自定义对话框中设置自定义按钮?