在显示多个 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/