gpt4 book ai didi

android - 如何设置完全透明的导航栏(NOT TRANSLUCENT)并保持接收窗口插图更新

转载 作者:行者123 更新时间:2023-11-29 22:40:10 27 4
gpt4 key购买 nike

下图基本上是我的目标,一个完全透明的导航栏(不是半透明的),它背后的内容不断获得插入更新,所以它在它后面绘制,但没有得到导航控件覆盖的任何 UI。

enter image description here

到目前为止,实现上图中结果的唯一方法是设置标志 FLAG_LAYOUT_NO_LIMITS到 Activity 。问题是完成后,如果启用了手势导航,应用程序将不再接收任何插图,但手势插图除外。

我已经尝试了所有我能想到的组合,但到目前为止我完全无法实现 100% 透明的导航栏 + 窗口插入。

我假设设置该标志时导航栏不透明的原因是因为系统窗口插入现在为 0,因此半透明区域缩小到 0 高度,使导航控件没有背景。

我也试过设置

<item name="android:navigationBarColor">@android:color/transparent</item>

但是,所有这一切只是让导航栏完全变白,内容不会显示在它后面。

我还为我进行的所有测试启用和禁用了以下功能

<item name="android:windowDrawsSystemBarBackgrounds">true</item>

我已经深入研究了 Window Insets 的噩梦,有一种方法可以通过 getWindow().getDecorView().getRootWindowInsets() 找到 window insets| ,但随后我将陷入在不需要时添加插图的问题(例如,多窗口模式)并且我仍然不会获得窗口插图更新,例如当键盘打开时。

我看过 (@chris-banes) Chris Banes 的“成为高级 window 装配工”,但是从未涵盖这个特定场景。

这不可能吗?我们可以为状态栏实现这个结果,但我们永远无法为导航栏做同样的事情?如果没有,那么如何实现?

我想要的只是一个 100% 透明(不透光)的导航栏,并且应用程序不断接收带有预期值的窗口插图,而不是所有值的 0。

最佳答案

Chris Banes 也有一篇更新的博文,完全符合您的要求: https://medium.com/androiddevelopers/windowinsets-listeners-to-layouts-8f9ccc8fa4d1

简而言之,在 Root View 上设置以下系统 ui 标志:

rootView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

得到如下结果:

enter image description here

然后您可以通过添加 onApplyWindowInsetsListener 更新 View 的填充或边距,使其可用于触摸事件:

bottomNav.setOnApplyWindowInsetsListener { view, insets ->
view.updatePadding(bottom = insets.systemWindowInsetBottom)
insets
}

对于完整的解决方案,我建议您阅读整篇文章,这篇文章很好,对我帮助很大。

关于android - 如何设置完全透明的导航栏(NOT TRANSLUCENT)并保持接收窗口插图更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59087378/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com