【问题标题】:Jetpack Compose: Can't make statusBar completely transparentJetpack Compose:无法使状态栏完全透明
【发布时间】:2022-11-28 06:31:45
【问题描述】:

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

我试过的:

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

另外,我试过玩窗户在 MainActivity 之前和中设置内容称呼:

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

我想在 Google 地图中看到类似的结果,但现在我的状态栏是白灰色而不是透明的

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

【问题讨论】:

    标签: android android-jetpack-compose android-statusbar


    【解决方案1】:

    这是伴奏者在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

    【讨论】:

    【解决方案2】:

    不需要任何额外的依赖。

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

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

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

    window.navigationBarColor = Color.Transparent.toArgb()
    

    【讨论】:

      猜你喜欢
      • 2022-11-14
      • 2020-04-15
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2022-08-09
      • 2021-02-26
      • 2022-12-21
      相关资源
      最近更新 更多