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