You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 03:13:10