此次基于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
}
}