如何使用 Jetpack Compose 隐藏 ActionBar

amt*_*rax 7 android user-experience kotlin android-actionbar android-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" />
Run Code Online (Sandbox Code Playgroud)

而效果是这样的:

在此输入图像描述

我想要实现的目标是这样的:

在此输入图像描述

摄影应覆盖白色区域。如何做到这一点?

更新1

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

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

尽管插图已打开,但一切看起来都是这样的: 在此输入图像描述

当删除这些标志时,插图可以工作,但我有那个阴影:

在此输入图像描述

Phi*_*hov 12

如果您需要完全隐藏状态栏,则需要使用全屏主题,如本答案所示


Compose 1.2.0-alpha03以来,Accompanist Insets大部分已移至 Compose Foundation 中,请查看迁移指南以了解更多详细信息。以下答案的主要变化是ProvideWindowInsets不再需要,并且应该替换一些导入。


如果您需要透明的状态栏,您可以按照此答案,加上设置伴奏插图进行撰写,如下所示:

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

systemBarsPadding然后,在合成中,您可以使用其他伴奏插入修改器将图像设置为背景并从状态/导航栏偏移。

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")
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

结果: