Jetpack Compose:无法使状态栏完全透明

And*_*nov 1 android android-statusbar android-jetpack-compose

我有一个屏幕,其中包含一个地图,我想让状态栏完全透明。

我尝试过的:

implementation "com.google.accompanist:accompanist-systemuicontroller:0.26.1-alpha"

@Composable
fun MapMainScreen() = Column(
    modifier = Modifier.fillMaxSize()
) {
    val controller = rememberSystemUiController()
    controller.setStatusBarColor(color = Color.Transparent)
    controller.setNavigationBarColor(color = Color.Transparent)
    controller.setSystemBarsColor(color = Color.Transparent)
    
    Map()
}
Run Code Online (Sandbox Code Playgroud)

另外,我在setContent调用之前和调用中尝试在 MainActivity 中使用窗口

WindowCompat.setDecorFitsSystemWindows(window, false)
window.setFlags(
    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
)
Run Code Online (Sandbox Code Playgroud)

我想看到像 Google 地图一样的结果,但现在我的状态栏颜色是白灰色而不是透明

在此输入图像描述

在此输入图像描述

我该如何解决这个问题并使我的状态栏透明?

小智 7

不需要任何额外的依赖项。

在您的 Compose 主题中(或直接在 Activity 中)设置:

SideEffect {
    with(view.context as Activity) {
        WindowCompat.setDecorFitsSystemWindows(window, false)
        WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = !darkTheme
        window.statusBarColor = Color.Transparent.toArgb()
        window.navigationBarColor = Color.Transparent.toArgb()
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,您还可以添加此行以使导航栏透明:

window.navigationBarColor = Color.Transparent.toArgb()
Run Code Online (Sandbox Code Playgroud)