问题
我们在自定义Dialog后。如果希望Dialog宽度填充整个屏幕。
效果如下:
如果只是单纯的配置dialog
的width = ViewGroup.LayoutParams.MATCH_PARENT
无效。
即使在xml
布局中设置Layout
的宽度为:MATCH_PARENT
。也无效(但是这个配置是必须的)
可能是下面的效果:会根据我们的内容进行填充宽度。
而且,即使我们内容过多,两侧仍然还是会存在部分的区域无法填充占满。
解决
要解决问题,就需要知道为什么会这样。那是因为我们Dialog
自定义的时候。还有上一层布局
DecorView
本身自带的布局,会造成我们的Dialog
无法填充整个屏幕。
这也是很多地方的说法,是我们使用window.getDecorView().setBackground(null);
。
实际上来说,配置这些方法的时候都可以生效。满足我们的需要。
但是为什么有很多说,配置了Backgroud为null后。布局没有生效呢?
很简单。因为我们配置的顺序不对。
Window window = dialog.getWindow();
window.getDecorView().setBackground(null); // 必须在setAttributes 方法之前配置。 也就是配置完才能修改width或height。
WindowManager.LayoutParams attr = window.getAttributes();
attr.height = ViewGroup.LayoutParams.WRAP_CONTENT;
attr.width = ViewGroup.LayoutParams.MATCH_PARENT;
attr.gravity = Gravity.BOTTOM;
window.setAttributes(attr);
除了设置Background
以外,还可以设置: window.getDecorView().setPadding(0, 0, 0, 0);
这两个的配置都能处理Dialog
宽度的问题。但是唯一需要注意的是在设置setAttributes
方法之前先执行。
否则你配置的将无法生效。
希望能够帮助出现了这个问题的小伙伴吧。
ps:以上配置的时候还是需要我们设置主题样式
<style name="common_dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
</style>
public MyDialog(@NonNull Context context) {
super(context, R.style.common_dialog);
initWindow();
}
否则你的Dialog还是会有间隔,无法填充整个屏幕。
评论区