如何使用 Jetpack Compose 隐藏 ActionBar

How to hide ActionBar with Jetpack Compose

我想隐藏默认操作栏,所以在清单文件中我有以下代码:

    <style name="Theme.MyCompose" parent="Theme.Material.DayNight.NoActionBar">
</style>

<style name="Theme.Material.DayNight.NoActionBar" parent="@android:style/Theme.Material.Light.NoActionBar" />

效果是这样的:

我想达到的效果是这样的:

摄影应该覆盖白色区域。如何实现?

更新 1

在实施带有半透明状态栏和伴奏插图支持的解决方案后,我遇到了陌生行为。当 window 标志设置如下时:

 window.setFlags(
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
    )

虽然有插图,但一切看起来都是这样的:

删除这些标志时,插图有效,但我有阴影:

如果你需要完全隐藏状态栏,你需要使用全屏主题,如this answer


Since Compose 1.2.0-alpha03, Accompanist Insets was mostly moved into Compose Foundation, check out migration guide了解更多详情。以下答案的主要变化是不再需要 ProvideWindowInsets 并且应该替换一些导入。


如果你需要一个透明的状态栏,你可以按照, plus setup Accompanist Insets进行如下编写:

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

然后在撰写中,您可以将图像设置为背景并使用 systemBarsPadding 和其他 Accompanist Insets 修饰符从 status/navigation 条偏移。

setContent {
    ProvideWindowInsets {
        ComposePlaygroundTheme {
            Box {
                Image(
                    painterResource(id = R.drawable.my_image),
                    contentDescription = "...",
                    contentScale = ContentScale.FillBounds,
                    modifier = Modifier.fillMaxSize()
                )
                Column(
                    Modifier.systemBarsPadding()
                ) {
                    Button(onClick = { /*TODO*/ }) {
                        Text("Hello")
                    }
                }
            }
        }
    }
}

结果: