如何使用 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")
}
}
}
}
}
}
结果:
我想隐藏默认操作栏,所以在清单文件中我有以下代码:
<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
并且应该替换一些导入。
如果你需要一个透明的状态栏,你可以按照
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")
}
}
}
}
}
}
结果: