微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以在活动上覆盖状态栏,但不能覆盖导航栏

如何解决是否可以在活动上覆盖状态栏,但不能覆盖导航栏

我有一些活动,可以在屏幕顶部附近的图片上覆盖Android状态栏。 我是通过继承Theme.AppCompat.DayNight.NoActionBar的活动风格,然后在onCreate()中做到这一点来实现的:

            getwindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

这将在顶部实现透明的状态栏,这很好。

问题是,这也使底部的Android导航栏透明,并覆盖了活动底部附近的控件,这不是我想要的。我希望导航栏是不透明的,并占用其垂直空间而不要移开我的控件,就像在普通活动中不会溢出状态栏一样。

是否可以从状态栏中单独控制导航栏 的透明度和重叠程度,而无需任何人工的边距或填充?

解决方法

如果我理解正确,那么您的意图是获得透明的状态栏,而无需触摸下面的屏幕截图所示的导航栏。

enter image description here

我个人还尝试使用参数FLAG_LAYOUT_NO_LIMITS而不达到期望的结果。问题是我同时获得状态栏和导航栏,这些状态栏和导航栏被图形“覆盖”为按钮。临时的解决方案是检测导航栏,并以编程方式向图形添加填充。这是部分无用的,因为许多Android用户使用adb shell overscan命令来隐藏导航栏。该命令的主要问题在于,它有效地隐藏了导航栏,但将系统欺骗为表示该栏是否存在的布尔值,而布尔值没有改变。该API已在Android 11中完全删除。

可以通过使用样式来实现所需的效果。 将这些属性添加到您的活动样式中:

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowTranslucentStatus">true</item>

您将获得如下样式:

<style name="ExampleThemeStackOverFlow" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <item name="colorPrimary">@color/colorAccentX</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:navigationBarColor">@color/colorPrimary</item>
    <item name="android:windowLightNavigationBar" tools:targetApi="27">true</item>

    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:windowTranslucentStatus">true</item>
</style>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。