Android开发中Dialog填充满父容器

发布时间 2023-04-11 09:54:18作者: 潶Se星期天~

Android开发中Dialog填充满父容器

Android原生开发中,通常会使用自定义的Dailog来设计二级面板,其自带一个黑色透明的遮蔽效果。但是想要将Dialog填充满父容器,是需要一些尝试的。

环境介绍

自定义Dialog类,加载自定义布局layout并进行数据绑定,同时创建接口进行信息传递。

其中 布局的根容器 相关属性如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/photo_editor_white"
    android:orientation="vertical"
    android:padding="20dp">
    ...
</LinearLayout>

由于主Activity背景为黑色,因此设置Dialog背景为白色,同时有一定的内边距。

默认情况

默认代码就是

MyDialog mydialog = new MyDialog(this);
drawDialog.getWindow().setGravity(Gravity.BOTTOM);//从底部弹出
mydialog.show();

通常来说弹出框的大小跟布局文件根容器属性无关,虽然根容器设置了match_parent但是实际上默认尺寸是wrap_content,也就是说根据实际的容器内组件大小来确定。下图是空组件的效果:

image-20230410192650267

横向可变,纵向有一个底边距

布局设置

通过Java代码设置其横向实际宽度match_parent,只需加上下面两句即可。

Window window = drawDialog.getWindow();
window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);

效果如下:

image-20230410193025768

横向有一个左右边距,纵向有一个底边距

背景设置

之后尝试了很多方法,最后发现只需要加上

Window window = drawDialog.getWindow()
window.setBackgroundDrawableResource(android.R.color.transparent);

即可,效果如下:

image-20230410193620628

左右填满,底边距消除

备注

window.setBackgroundDrawableResource(android.R.color.transparent);是设计容器背景颜色为透明色,其实里面随便填一种颜色都能实现同样的效果,比如 window.setBackgroundDrawableResource(android.R.color.black);等。