美文网首页
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