分屏模式下透明导航栏不透明
Transparent navigation bar is not transparent in split screen mode
我正在开发的一个应用程序在 Android 支持它的版本上使用透明系统栏。这是通过样式中的以下定义完成的:
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
以及以下代码:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
/* Make system bars fully transparent */
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
}
在正常模式下,这按预期工作:状态和导航栏都覆盖在应用程序内容上。
在分屏模式下,这适用于状态栏,但不适用于导航栏:在纵向模式下,当应用位于底部时,导航栏是黑色的,但 getWindow().getDecorView().getRootWindowInsets().getSystemWindowInsetBottom()
报告插入了144 像素。装饰视图的高度比根视图的高度低 144 像素(没有分屏,它们是相等的,因为应用程序没有操作栏)。当应用程序位于右侧(如导航栏)时,横向模式下的类似症状。
添加 View.SYSTEM_UI_FLAG_LAYOUT_STABLE
标志没有任何效果。
该设备是智能手机,即默认为纵向并在横向模式下在侧面显示导航栏的设备。
这是我使用的 Android 发行版(LineageOS 15.1,Android 8.1.0)中的错误,还是我遗漏了什么?导航栏在分屏模式下应该透明吗?如果不是,我如何可靠地确定我的视图的哪些部分将被系统栏遮挡?
由于我仍然无法解释所报告的值,我认为这是 Android.
的许多(如果不是全部)版本中存在的错误
此外,获得 window 插入的首选方法显然是覆盖 onApplyWindowsInsets()
并评估传递的 insets
参数(自 API 20 以来一直支持,而上述方式需要 API 23)。不幸的是,这似乎有 ,即报告不正确的顶部插图,但合并这两个结果对我有用。
- 存储传递给
onApplyWindowsInsets()
的插图,仅丢弃顶部的插图。
- 使用存储的值,并依靠
View#getRootWindowInsets()
获得顶部插图。
组合值对我有用。
我正在开发的一个应用程序在 Android 支持它的版本上使用透明系统栏。这是通过样式中的以下定义完成的:
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
以及以下代码:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
/* Make system bars fully transparent */
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
}
在正常模式下,这按预期工作:状态和导航栏都覆盖在应用程序内容上。
在分屏模式下,这适用于状态栏,但不适用于导航栏:在纵向模式下,当应用位于底部时,导航栏是黑色的,但 getWindow().getDecorView().getRootWindowInsets().getSystemWindowInsetBottom()
报告插入了144 像素。装饰视图的高度比根视图的高度低 144 像素(没有分屏,它们是相等的,因为应用程序没有操作栏)。当应用程序位于右侧(如导航栏)时,横向模式下的类似症状。
添加 View.SYSTEM_UI_FLAG_LAYOUT_STABLE
标志没有任何效果。
该设备是智能手机,即默认为纵向并在横向模式下在侧面显示导航栏的设备。
这是我使用的 Android 发行版(LineageOS 15.1,Android 8.1.0)中的错误,还是我遗漏了什么?导航栏在分屏模式下应该透明吗?如果不是,我如何可靠地确定我的视图的哪些部分将被系统栏遮挡?
由于我仍然无法解释所报告的值,我认为这是 Android.
的许多(如果不是全部)版本中存在的错误此外,获得 window 插入的首选方法显然是覆盖 onApplyWindowsInsets()
并评估传递的 insets
参数(自 API 20 以来一直支持,而上述方式需要 API 23)。不幸的是,这似乎有
- 存储传递给
onApplyWindowsInsets()
的插图,仅丢弃顶部的插图。 - 使用存储的值,并依靠
View#getRootWindowInsets()
获得顶部插图。
组合值对我有用。