透明状态栏(带可见导航栏)

我知道这个问题已经被问过很多次了,但所有的答案要么不起作用,要么使用了不推荐使用的代码:

  • Android 完全透明的状态栏?
  • 透明状态栏 - Android 4.4 (KitKat) 之前
  • Lollipop : 在 statusBar 后面绘制,颜色设置为透明

我想达到与最新的谷歌地图应用程序相同的效果:

  • 完全透明的状态栏(只有状态栏。不是导航栏!)
  • 未弃用的解决方案

WindowCompat.setDecorFitsSystemWindows(window, false) 部分工作,因为它还隐藏了导航栏

回答

第 1 步:要使状态栏透明:将以下内容添加到样式中themes.xmlsytles.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 个设备/模拟器上进行了测试。


以上是透明状态栏(带可见导航栏)的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>