美文网首页
BottomSheetDialogFragment 背景色、导航

BottomSheetDialogFragment 背景色、导航

作者: 小强开学前 | 来源:发表于2022-01-07 17:19 被阅读0次

原因是 window 的 DecorView 与 我们 XML 内的 View 之间的有一级ViewGroup
它默认会有OnApplyWindowInsetsListener的响应,也会在创建完 Dialog 后设置默认背景色。

背景色无法修改

这个问题是写带圆角的底部弹窗的时候发现的

背景色具体的设置时间点很晚,测试发现需要在显示出来之后才可以进行覆盖

        requireDialog().setOnShowListener(dialog -> ((ViewGroup) view.getParent()).setBackgroundColor(Color.TRANSPARENT));

导航栏颜色透明

这个问题确实不影响使用,但是在了解 WindowInset 相关知识后,觉得可以做得更好

WindowInset 可以从父布局进行拦截,因为响应这个变化的 ViewGroup 是 DecorView 的子View,所以这里我们可以对 DecorView 设置监听,在内部对我们 XML 的布局进行适配,然后消耗掉 Inset。

 // Edge to edge
 ViewCompat.setOnApplyWindowInsetsListener(requireDialog().getWindow().getDecorView(), (v, insets) -> {
     Insets inset = insets.getInsets(WindowInsetsCompat.Type.systemBars());
     mBinding.getRoot().setPadding(inset.left, 0, inset.right, inset.bottom);
     return WindowInsetsCompat.CONSUMED;
});

相关文章

网友评论

      本文标题:BottomSheetDialogFragment 背景色、导航

      本文链接:https://www.haomeiwen.com/subject/qfnjcrtx.html