对话不尊重MATCH_PARENT

时间:2018-02-17 10:13:50

标签: android android-layout

我打算使用自定义布局显示Dialog

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
      android:background="#ffffff"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <WebView
        android:id="@+id/webv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginRight="@dimen/lef_margin"
        android:layout_marginTop="@dimen/lef_margin"
        android:background="#ffffff"
        android:fitsSystemWindows="true" />

    <ImageView
        android:id="@+id/imgsocialauthclose"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_gravity="right|top"
        android:background="@drawable/closexml" />

</FrameLayout>

现在,如果II将此布局设置为对话框Dialog.setContentView(),我会得到类似下面的内容(请注意,相关的Dialog是您的白色框,中间有一个十字按钮,不是在后台具有所有社交媒体选项的那个):

enter image description here

现在,除了setContentView()调用之外,如果我要写这个额外的行,我会得到一个扩展为覆盖父视图的Dialog:

dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

如果您观察布局,您会注意到已经声明了MATCH_PARENT约束。那么,为什么我需要做这个额外的行,或

为什么默认情况下Dialog不正确地遵守MATCH_PARENT约束?

1 个答案:

答案 0 :(得分:0)

我通过将此对象片段添加到onCreateDialog来解决此问题。这将使您的对话框全屏显示。然后,您可以使用透明背景定义边距/填充,以您想要的任何方式塑造对话框。

Dialog dialog = new Dialog(getActivity() ,android.R.style.Theme_Holo_NoActionBar);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

然后显示对话框只需使用

MyDialogFragment fragment = new MyDialogFragment();
fragment.show(getChildFragmentManager(), "addPlaylistDialog");