下图基本上是我的目标,一个完全透明的导航栏(不是半透明的),它后面的内容不断得到插入更新,所以它在它后面绘制,但没有得到导航控件覆盖的任何 UI。
到目前为止,实现上图中结果的唯一方法是将标志设置FLAG_LAYOUT_NO_LIMITS
为活动。问题是,完成此操作后,如果启用了手势导航,应用程序将不再接收任何插图,除了手势插图。
我已经尝试了所有我能想到的组合,但到目前为止我完全无法实现 100% 透明的导航栏 + 窗口插图。
我假设在设置该标志时导航栏不透明的原因是因为系统窗口插图现在为 0,因此半透明区域缩小到 0 高度,使导航控件没有背景。
我也试过设置
<item name="android:navigationBarColor">@android:color/transparent</item>
然而,这一切只是让导航栏完全变白,并且内容不会显示在它后面。
对于我进行的所有测试,我还启用和禁用了以下功能
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
我已经研究了 Window Insets 噩梦的高度和之上,并且有一种方法可以通过 找到窗口 insets getWindow().getDecorView().getRootWindowInsets()
,但是我将遇到在不需要时添加 insets 的问题(例如,多窗口模式)和我仍然不会收到窗口插图更新,例如打开键盘时。
我看过 (@chris-banes) Chris Banes 的“成为一名主要的窗户装配工”,但从未涵盖过这个特定场景。
这是不可能的吗?我们可以为状态栏实现这个结果,但我们永远无法为导航栏做同样的事情?如果没有,那么如何实现呢?
我想要的只是一个 100% 透明(非半透明)的导航栏,并且应用程序不断接收具有预期值的窗口插图,而不是所有值的 0。