Jetpack Compose实现状态栏透明且仅隐藏内容的方法
解决方案
要实现仅隐藏状态栏的图标/文字内容、同时保持内容延伸到透明状态栏下方的效果,不要使用insetsController.hide()(该方法会完全移除状态栏窗口导致布局下移),而是通过WindowInsetsControllerCompat的setSystemBarsAppearance方法来实现:
修改后的代码
override fun onCreate(savedInstanceState: Bundle?) { enableEdgeToEdge() super.onCreate(savedInstanceState) // 获取Insets控制器并配置状态栏内容隐藏 val windowInsetsController = WindowCompat.getInsetsController(window, window.decorView) windowInsetsController.setSystemBarsAppearance( WindowInsetsControllerCompat.APPEARANCE_HIDE_STATUS_BARS, WindowInsetsControllerCompat.APPEARANCE_HIDE_STATUS_BARS ) setContent { SampleApplicationTheme { Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { Image( painter = rememberAsyncImagePainter("https://picsum.photos/seed/1234/700/2000"), contentDescription = "Bucket Photo", modifier = Modifier.fillMaxSize(), contentScale = ContentScale.Crop ) } } } }
关键说明
setSystemBarsAppearance仅隐藏状态栏内部的图标、文字等内容,不会移除状态栏的透明窗口区域,因此你的图片等内容会保持在状态栏下方延伸显示,充分利用整个屏幕空间。- 给
Image添加Modifier.fillMaxSize()和contentScale = ContentScale.Crop是为了确保图片完全适配延伸后的全屏布局,可根据实际需求调整缩放方式。
内容的提问来源于stack exchange,提问作者Shailesh
相关产品推荐
相关产品推荐

