侧边栏壁纸
  • 累计撰写 416 篇文章
  • 累计创建 65 个标签
  • 累计收到 145 条评论

目 录CONTENT

文章目录

Android Dialog 界面宽度无法充满屏幕问题-一行代码处理。

Z同学
2022-02-27 / 0 评论 / 3 点赞 / 1,855 阅读 / 1,243 字
温馨提示:
本文最后更新于 2022-03-15,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

问题

我们在自定义Dialog后。如果希望Dialog宽度填充整个屏幕。

效果如下:

image-20220227191916311

如果只是单纯的配置dialogwidth = ViewGroup.LayoutParams.MATCH_PARENT 无效。

即使在xml布局中设置Layout 的宽度为:MATCH_PARENT。也无效(但是这个配置是必须的)

可能是下面的效果:会根据我们的内容进行填充宽度。

image-20220227192038991

而且,即使我们内容过多,两侧仍然还是会存在部分的区域无法填充占满。

解决

要解决问题,就需要知道为什么会这样。那是因为我们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还是会有间隔,无法填充整个屏幕。

3

评论区