android - 如何使用 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
)
删除这些标志时,插图有效,但我有那个阴影:
解决方案
如果您需要完全隐藏状态栏,则需要使用全屏主题,如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")
}
}
}
}
}
}
结果:
推荐阅读
- pandas - Pandas - 将日期转换为日期时间格式
- java - 导航抽屉未使用 RecyclerView 加载布局
- java - 如何将列表列表转换为 Java 8 中的列表?没有流,只有 for( 或 foreach) 和 if
- asp.net-mvc - 返回递归结果
- oracle - 错误(11,10):PLS-00306:调用“CONSTRUCT”时参数的数量或类型错误
- excel - 通过引用 Cells.Find() 有条件 - VBA
- java - java.lang.UnsupportedClassVersionError - 在 MAC OSX 上 - 不支持的类文件主要版本 56
- python - 无效的语法 (
,第 89 行)-pylint(语法错误) - sql - 如果不是使用 SQL 的另一个表,如何从表中删除列?
- javascript - 无法在 Ionic 3 应用程序中导入 Amplitude SDK