Jetpack Compose
概述
Jetpack Compose 是Android新一代UI框架,采用了 声明式 的开发范式,基于Kotlin DSL打造,并且可以和现有的Android View 体系共存。
Compose API设计原则
- 一切皆为函数
- Compose声明式UI的基础是Composable函数。通过Kotlin的尾Lambda语法特性让 Composable 嵌套,形成树形层级。
- 视图树一旦形成不可随意改变,视图的刷新依靠Composable函数的反复执行来实现(重组),类似 挂起函数 只能在协程中使用一样。
- 没有继承,所有组件都是 顶层函数
- 组合优于继承
这是面向对象设计模式中反复强调的原则,继承方便,但是也会给子类污染,添加很多子类不需要的功能。
- 单一数据源
这是所有声明式UI的重要原则,多源情况下状态变化容易混乱,单一数据源决定了Compose数据流的单向流动。
Compose 和 View 的关系
Compose和View一样,也是树形结构,不过由LaoutNode组成,由Composition负责管理,通过 Android Studio的Layout Inspector 可以看到借助 ComposeView 可以将 LayoutNode和View链接起来
ComposeView有一个唯一子节点AndroidComposeView,ComposeView负责对Android平台的Activity窗口适配,AndroidComposeView负责链接LayoutNode视图系统和View视图系统。
同时在Compose中,有些需要原生组件的,可以借助Compose组件AndroidView来衔接,可参考 Compose和Android View相互使用
Compose预览
通过对需要预览的Composable函数增加一个@Preview注解即可。点开Preview源码可以看到其有很多参数可配,部分如下
widthDp—将在其中渲染带注释的@Composable的最大DP宽度。使用此选项可以限制渲染视口的大小。
heightDp-将在其中渲染注释的@Composable的最大高度(以DP为单位)。使用此选项可以限制渲染视口的大小。
locale-区域设置的当前用户首选项,对应于区域设置资源限定符。默认情况下,将使用默认文件夹。
showSystemUi-如果为true,将显示设备的状态栏和操作栏。@Composable将在完整活动的上下文中呈现。
showBackground-如果为true,@Composable将使用默认背景色。
backgroundColor-背景的32位ARGB颜色int,如果未设置,则为0
uiMode—根据android.content.res.Configuration.uiMode的ui模式位掩码