【问题标题】: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()