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
,也就是说根据实际的容器内组件大小来确定。下图是空组件的效果:
横向可变,纵向有一个底边距
布局设置
通过Java代码设置其横向实际宽度为match_parent
,只需加上下面两句即可。
Window window = drawDialog.getWindow();
window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
效果如下:
横向有一个左右边距,纵向有一个底边距
背景设置
之后尝试了很多方法,最后发现只需要加上
Window window = drawDialog.getWindow()
window.setBackgroundDrawableResource(android.R.color.transparent);
即可,效果如下:
左右填满,底边距消除
备注
window.setBackgroundDrawableResource(android.R.color.transparent);
是设计容器背景颜色为透明色,其实里面随便填一种颜色都能实现同样的效果,比如 window.setBackgroundDrawableResource(android.R.color.black);
等。