Jetpack Compose中隐藏状态栏时如何让内容绘制于其后方?
解决方案
要实现内容延伸至状态栏、刘海屏区域,同时隐藏状态栏图标的效果,你需要调整窗口显示策略,确保隐藏状态栏后仍保持内容全屏延伸:
修改后的MainActivity.kt代码如下:
class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 启用Edge-to-Edge模式,让系统栏透明 enableEdgeToEdge() // 配置窗口属性,确保内容能延伸到系统栏、刘海区域 window.apply { // 针对Android P及以上设备,允许内容覆盖刘海屏切口 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES } // 禁用系统自动添加内边距,让内容完全填充屏幕 decorView.fitsSystemWindows = false } // 配置沉浸式模式,隐藏状态栏图标并设置滑动唤起行为 WindowInsetsControllerCompat(window, window.peekDecorView()).apply { hide(WindowInsetsCompat.Type.statusBars()) systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE } setContent { Box(modifier = Modifier .fillMaxSize() .background(Color.Red)) { Text("Hello") } } } }
关键调整说明
decorView.fitsSystemWindows = false:关闭系统自动为内容添加的内边距适配,确保Compose内容能完全覆盖状态栏、导航栏区域。layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES:让内容可以延伸到刘海屏等屏幕切口区域,避免出现未填充的黑色块。- 保留
enableEdgeToEdge():维持系统栏的透明状态,保证内容能在系统栏后方正常显示。
调整后即可实现需求:内容全屏覆盖(含状态栏、刘海区域),状态栏图标隐藏,滑动屏幕边缘可临时唤起状态栏。
内容的提问来源于stack exchange,提问作者dominik
相关产品推荐
相关产品推荐

