33. Compose封装基类 适配状态栏

此次基于Compose1.2.0和 accompanist 0.25.0来做的
正是因为以前的Insets (Deprecated) 已经转移到compose核心包里面,好好整理了一下。
Insets迁移地址

初始化Compose主布局

@Composable
inline fun ComposeInitView(
    modifier: Modifier = Modifier,
    window: Window,
    isFitSys: Boolean = true,
    stateBarColor: Color = Color.White,
    navigationBarColor: Color = Color.White,
    isDarkFont: Boolean = true,
    crossinline content: @Composable () -> Unit,
) {
	//沉浸式状态栏设置
    WindowCompat.setDecorFitsSystemWindows(window, isFitSys)
    
    MaterialTheme {
        val systemUiController = rememberSystemUiController()
        SideEffect {
        	//设置顶部状态栏的颜色
            systemUiController.setStatusBarColor(
                color = stateBarColor,
                darkIcons = isDarkFont
            )
        	//设置底部状态栏的颜色
            systemUiController.setNavigationBarColor(
                color = navigationBarColor,
                darkIcons = isDarkFont
            )
        }
		//在方法参数里面添加了 Modifier就是为了可以设置background(color,shape)同时还可以设置渐变色background(brush,shape)
        var modifierNew: Modifier = modifier.then(
            Modifier.fillMaxSize()
        )

        if (!isFitSys && systemUiController.isStatusBarVisible) {
        	//如果是沉浸式需要设置 padding来占位
           modifierNew = modifierNew.then(Modifier.statusBarsPadding())
        }

        if (systemUiController.isNavigationBarVisible) {
        	//给底部状态栏预留高度,以免遮盖UI
           modifierNew = modifierNew.then(Modifier.navigationBarsPadding())
        }

        Column(
            modifier = modifierNew
        ) {
            content()
        }
    }
}

创建一个基类 BaseActivity

如果你还不太适应一个应用 一个Activity的架构,可以用多个Activity

abstract class BaseActivity : AppCompatActivity() {

    @Composable
    open fun InitView(
        modifier: Modifier = Modifier,
        isFitSys: Boolean = true,
        stateBarColor: Color = Color.White,
        navigationBarColor: Color = Color.White,
        isDarkFont: Boolean = true,
    ) {
        ComposeInitView(
            modifier = modifier,
            window = window,
            isFitSys = isFitSys,
            stateBarColor = stateBarColor,
            navigationBarColor =navigationBarColor,
            isDarkFont = isDarkFont) {
            InitBody()
        }
    }

    @Composable
    abstract fun InitBody()
}

举例

class ExampleActivity:BaseActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            //此方法可以设置布局的 是否沉浸式 颜色等参数
            InitView()
        }
    }

    @Composable
    override fun InitBody() {
        //TODO: your UI code
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值