Jetpack Compose:无法使statusBar完全透明

xcitsw88  于 2022-09-21  发布在  Android
关注(0)|答案(2)|浏览(155)

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

我试过的是:

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()
}

另外,我在setContent调用之前和在setContent调用中都尝试过在MainActivity中使用Window

WindowCompat.setDecorFitsSystemWindows(window, false)
window.setFlags(
    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
)

我希望看到像谷歌Map一样的结果,但现在我的statusBar显示为白色-灰色,而不是透明

我如何解决这个问题并使我的statusBar变得透明?

dpiehjr4

dpiehjr41#

这是伴奏者在doc中建议的:

// Remember a SystemUiController
val systemUiController = rememberSystemUiController()
val useDarkIcons = !isSystemInDarkTheme()

DisposableEffect(systemUiController, useDarkIcons) {
    // Update all of the system bar colors to be transparent, and use
    // dark icons if we're in light theme
    systemUiController.setSystemBarsColor(
        color = Color.Transparent,
        darkIcons = useDarkIcons
    )

    // setStatusBarColor() and setNavigationBarColor() also exist

    onDispose {}
}

还有最新的版本是:0.26.3-beta

j0pj023g

j0pj023g2#

您可以尝试在YourAppTheme.kt中使用以下代码:

...
val view = LocalView.current
if (!view.isInEditMode) {
    SideEffect {
        (view.context as Activity).window.statusBarColor = Color.Transparent.toArgb()
        (view.context as Activity).window.setDecorFitsSystemWindows(false)
        ViewCompat.getWindowInsetsController(view)?.isAppearanceLightStatusBars = darkTheme
    }
}
...

曾经有一面半透明的旗帜被破坏了,也看看这面thread

相关问题