透明状态栏(带可见导航栏)
我知道这个问题已经被问过很多次了,但所有的答案要么不起作用,要么使用了不推荐使用的代码:
- Android 完全透明的状态栏?
- 透明状态栏 - Android 4.4 (KitKat) 之前
- Lollipop : 在 statusBar 后面绘制,颜色设置为透明
我想达到与最新的谷歌地图应用程序相同的效果:
- 完全透明的状态栏(只有状态栏。不是导航栏!)
- 未弃用的解决方案
WindowCompat.setDecorFitsSystemWindows(window, false) 部分工作,因为它还隐藏了导航栏
回答
第 1 步:要使状态栏透明:将以下内容添加到样式中themes.xml或sytles.xml:
<item name="android:windowTranslucentStatus" tools:targetApi="kitkat">true</item>
<item name="android:statusBarColor" tools:targetApi="lollipop">@android:color/transparent</item>
步骤2:然后在活动中使状态栏与活动重叠:
从 API 级别 30 起不推荐使用使用的窗口标志,因此它们可以使用到 API 级别 29:
if (Build.VERSION.SDK_INT in 21..29) {
window.statusBarColor = Color.TRANSPARENT
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
window.decorView.systemUiVisibility =
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or SYSTEM_UI_FLAG_LAYOUT_STABLE
} else if (Build.VERSION.SDK_INT >= 30) {
window.statusBarColor = Color.TRANSPARENT
// Making status bar overlaps with the activity
WindowCompat.setDecorFitsSystemWindows(window, false)
}
这在 API 级别 19 到 API 级别 30 的范围内在 8 个设备/模拟器上进行了测试。