Compose Multiplatform:如何在CommonMain中修改状态栏透明度?
修改状态栏透明度(基于CommonMain开发)
由于CommonMain是Kotlin Multiplatform的共享代码模块,无法直接操作平台专属的状态栏UI,需通过expect/actual机制实现跨平台适配:
在CommonMain中定义共享的期望函数:
expect fun setStatusBarTransparent()在Android平台模块(如AndroidMain)中实现具体逻辑:
actual fun setStatusBarTransparent() { val window = (AppCompatActivity().currentActivity as? AppCompatActivity)?.window ?: return window.apply { // 适配Android不同版本的状态栏透明逻辑 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { insetsController?.let { it.systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE it.hide(WindowInsets.Type.statusBars()) } } else { decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) } } }在iOS平台模块(如iOSMain)中实现具体逻辑:
actual fun setStatusBarTransparent() { UIApplication.shared.windows.firstOrNull()?.let { window -> window.backgroundColor = UIColor.clear if (@available(iOS 13.0, *)) { window.windowScene?.statusBarManager?.statusBarStyle = UIStatusBarStyle.lightContent } else { UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent } } }
完成上述定义后,在CommonMain的业务代码中直接调用setStatusBarTransparent()即可,框架会自动匹配对应平台的实现完成状态栏透明设置。
内容的提问来源于stack exchange,提问作者Hassen
相关产品推荐
相关产品推荐

