首页 > 解决方案 > 如何使用 Jetpack Compose 隐藏 ActionBar

问题描述

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

    <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.setFlags(
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
    )

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

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

在此处输入图像描述

标签: androidkotlinandroid-actionbarandroid-jetpack-composeuser-experience

解决方案


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


如果你需要一个透明的状态栏,你可以按照这个答案,加上设置伴奏插图进行组合,如下所示:

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

然后在 compose 中,您可以使用systemBarsPadding和其他Accompanist Insets修饰符将图像设置为背景并从状态/导航栏偏移。

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

结果:


推荐阅读