第1章 全新的Android UI框架
依据2022年首版完整目录覆盖18个节点:从声明式UI、Compose API原则与View关系,走到环境部署、首个应用、预览和已有项目接入
第1章 全新的Android UI框架
本页依据王鹏、关振智、曾思淇《Jetpack Compose从入门到实战》独立重构,不复制原文。版本锁定机械工业出版社2022年8月首版、331页、ISBN 9787111711377;得到电子版标注2022年7月发行。全书正式结构是11章、200个章/节/小节节点。
原书处在Compose快速演进的2022年。课程先复现书中的API、行为和项目边界,再把今天的替代方案写入迁移账本;不会用Material 3、类型安全路由或Foundation新API改写原目录。
学习目标
- 能逐项解释“第1章 全新的Android UI框架”全部18个目录节点的输入状态、组合边界、布局或事件结果。
- 能实现“从声明式UI、Compose API原则与View关系,走到环境部署、首个应用、预览和已有项目接入”的最小可运行切片,并保存源码、依赖版本、状态样本与测试证据。
- 能区分正确结果、性能成本、生命周期故障和版本差异,并用状态到UI映射、编译配置、预览与设备结果、版本目录、View与Compose双向边界验收。
- 能设计反例推翻“把声明式UI理解成少写XML,仍在组合期间执行I/O或手动命令式修改组件”,并完成2022年原书机制到现代Compose的迁移记录。
从状态开始
↡以状态为输入描述界面结果,由框架负责把状态变化映射为界面更新、↡由Compose编译器参与转换、可进入组合树的带Composable注解函数、↡通过内容lambda向调用者开放结构插槽而不是依赖继承扩展组件、↡在受限设计时环境中渲染可组合函数并快速核对状态样本的工具、↡Compose树与传统View树相互嵌入并传递状态、事件和生命周期的接缝构成本页的核心词汇。Compose不是“自动更新一切”:只有被观察的状态读、稳定身份、正确Effect键和明确所有者共同成立,框架才能把变化限制在可解释范围。每个示例先写状态和事件,再画组合、布局、绘制与外部副作用边界。
本单元主线是从声明式UI、Compose API原则与View关系,走到环境部署、首个应用、预览和已有项目接入。交互管线用于逐层选择目录节点;反例实验在正常、状态抖动、错误身份、所有者销毁与版本漂移之间切换;证据门要求结构、状态、生命周期、可访问性和迁移五类证据全部通过。
权威目录逐节点映射
第1章 全新的Android UI框架
章节合同 1/18。 本节点必须落实到“从声明式UI、Compose API原则与View关系,走到环境部署、首个应用、预览和已有项目接入”这条因果链中。学习时先写输入状态与预期界面,再记录组合、布局、绘制或事件结果;最终以状态到UI映射、编译配置、预览与设备结果、版本目录、View与Compose双向边界中的对应证据验收。不能只记住API名字。
1.1 Jetpack Compose是什么
主题边界 2/18。 本节点必须落实到“从声明式UI、Compose API原则与View关系,走到环境部署、首个应用、预览和已有项目接入”这条因果链中。学习时先写输入状态与预期界面,再记录组合、布局、绘制或事件结果;最终以状态到UI映射、编译配置、预览与设备结果、版本目录、View与Compose双向边界中的对应证据验收。不能只记住API名字。
1.1.1 谷歌为什么要推出Compose
可执行检查点 3/18。 本节点必须落实到“从声明式UI、Compose API原则与View关系,走到环境部署、首个应用、预览和已有项目接入”这条因果链中。学习时先写输入状态与预期界面,再记录组合、布局、绘制或事件结果;最终以状态到UI映射、编译配置、预览与设备结果、版本目录、View与Compose双向边界中的对应证据验收。不能只记住API名字。
1.1.2 命令式UI与声明式UI
可执行检查点 4/18。 本节点必须落实到“从声明式UI、Compose API原则与View关系,走到环境部署、首个应用、预览和已有项目接入”这条因果链中。学习时先写输入状态与预期界面,再记录组合、布局、绘制或事件结果;最终以状态到UI映射、编译配置、预览与设备结果、版本目录、View与Compose双向边界中的对应证据验收。不能只记住API名字。
1.1.3 Compose API设计原则
可执行检查点 5/18。 本节点必须落实到“从声明式UI、Compose API原则与View关系,走到环境部署、首个应用、预览和已有项目接入”这条因果链中。学习时先写输入状态与预期界面,再记录组合、布局、绘制或事件结果;最终以状态到UI映射、编译配置、预览与设备结果、版本目录、View与Compose双向边界中的对应证据验收。不能只记住API名字。
1.1.4 Compose与View的关系
可执行检查点 6/18。 本节点必须落实到“从声明式UI、Compose API原则与View关系,走到环境部署、首个应用、预览和已有项目接入”这条因果链中。学习时先写输入状态与预期界面,再记录组合、布局、绘制或事件结果;最终以状态到UI映射、编译配置、预览与设备结果、版本目录、View与Compose双向边界中的对应证据验收。不能只记住API名字。
1.1.5 不只是Android UI框架
可执行检查点 7/18。 本节点必须落实到“从声明式UI、Compose API原则与View关系,走到环境部署、首个应用、预览和已有项目接入”这条因果链中。学习时先写输入状态与预期界面,再记录组合、布局、绘制或事件结果;最终以状态到UI映射、编译配置、预览与设备结果、版本目录、View与Compose双向边界中的对应证据验收。不能只记住API名字。
1.2 搭建开发环境
主题边界 8/18。 本节点必须落实到“从声明式UI、Compose API原则与View关系,走到环境部署、首个应用、预览和已有项目接入”这条因果链中。学习时先写输入状态与预期界面,再记录组合、布局、绘制或事件结果;最终以状态到UI映射、编译配置、预览与设备结果、版本目录、View与Compose双向边界中的对应证据验收。不能只记住API名字。
1.2.1 准备所需要的开发工具
可执行检查点 9/18。 本节点必须落实到“从声明式UI、Compose API原则与View关系,走到环境部署、首个应用、预览和已有项目接入”这条因果链中。学习时先写输入状态与预期界面,再记录组合、布局、绘制或事件结果;最终以状态到UI映射、编译配置、预览与设备结果、版本目录、View与Compose双向边界中的对应证据验收。不能只记住API名字。
1.2.2 部署开发环境
可执行检查点 10/18。 本节点必须落实到“从声明式UI、Compose API原则与View关系,走到环境部署、首个应用、预览和已有项目接入”这条因果链中。学习时先写输入状态与预期界面,再记录组合、布局、绘制或事件结果;最终以状态到UI映射、编译配置、预览与设备结果、版本目录、View与Compose双向边界中的对应证据验收。不能只记住API名字。
1.3 创建第一个Compose应用
主题边界 11/18。 本节点必须落实到“从声明式UI、Compose API原则与View关系,走到环境部署、首个应用、预览和已有项目接入”这条因果链中。学习时先写输入状态与预期界面,再记录组合、布局、绘制或事件结果;最终以状态到UI映射、编译配置、预览与设备结果、版本目录、View与Compose双向边界中的对应证据验收。不能只记住API名字。
1.3.1 创建新的Compose项目
可执行检查点 12/18。 本节点必须落实到“从声明式UI、Compose API原则与View关系,走到环境部署、首个应用、预览和已有项目接入”这条因果链中。学习时先写输入状态与预期界面,再记录组合、布局、绘制或事件结果;最终以状态到UI映射、编译配置、预览与设备结果、版本目录、View与Compose双向边界中的对应证据验收。不能只记住API名字。
1.3.2 保持Compose版本更新
可执行检查点 13/18。 本节点必须落实到“从声明式UI、Compose API原则与View关系,走到环境部署、首个应用、预览和已有项目接入”这条因果链中。学习时先写输入状态与预期界面,再记录组合、布局、绘制或事件结果;最终以状态到UI映射、编译配置、预览与设备结果、版本目录、View与Compose双向边界中的对应证据验收。不能只记住API名字。
1.3.3 在模拟器中运行Compose应用
可执行检查点 14/18。 本节点必须落实到“从声明式UI、Compose API原则与View关系,走到环境部署、首个应用、预览和已有项目接入”这条因果链中。学习时先写输入状态与预期界面,再记录组合、布局、绘制或事件结果;最终以状态到UI映射、编译配置、预览与设备结果、版本目录、View与Compose双向边界中的对应证据验收。不能只记住API名字。
1.3.4 分析第一个Compose应用
可执行检查点 15/18。 本节点必须落实到“从声明式UI、Compose API原则与View关系,走到环境部署、首个应用、预览和已有项目接入”这条因果链中。学习时先写输入状态与预期界面,再记录组合、布局、绘制或事件结果;最终以状态到UI映射、编译配置、预览与设备结果、版本目录、View与Compose双向边界中的对应证据验收。不能只记住API名字。
1.3.5 对Compose应用进行预览
可执行检查点 16/18。 本节点必须落实到“从声明式UI、Compose API原则与View关系,走到环境部署、首个应用、预览和已有项目接入”这条因果链中。学习时先写输入状态与预期界面,再记录组合、布局、绘制或事件结果;最终以状态到UI映射、编译配置、预览与设备结果、版本目录、View与Compose双向边界中的对应证据验收。不能只记住API名字。
1.3.6 已有项目引入Compose
可执行检查点 17/18。 本节点必须落实到“从声明式UI、Compose API原则与View关系,走到环境部署、首个应用、预览和已有项目接入”这条因果链中。学习时先写输入状态与预期界面,再记录组合、布局、绘制或事件结果;最终以状态到UI映射、编译配置、预览与设备结果、版本目录、View与Compose双向边界中的对应证据验收。不能只记住API名字。
1.4 本章小结
主题边界 18/18。 本节点必须落实到“从声明式UI、Compose API原则与View关系,走到环境部署、首个应用、预览和已有项目接入”这条因果链中。学习时先写输入状态与预期界面,再记录组合、布局、绘制或事件结果;最终以状态到UI映射、编译配置、预览与设备结果、版本目录、View与Compose双向边界中的对应证据验收。不能只记住API名字。
可运行实现切片
下面代码只承担本章最小机制,不隐藏状态所有者和事件入口。真实项目还要补齐空态、错误态、恢复、可访问性与截图测试。
@Composable
fun Greeting(name: String) {
Text(text = "Hello, $name")
}
@Preview(showBackground = true)
@Composable
fun GreetingPreview() = AppTheme { Greeting("Compose") }实现后先断言业务结果,再观察组合或交互成本。把版本、设备、字体比例、窗口尺寸、主题和输入样本写进测试记录,才能分辨代码回归与环境差异。
data class ComposeProbe(
val stateId: String,
val recompositions: Int,
val semanticsReady: Boolean,
val ownerActive: Boolean
)
check(probe.semanticsReady)
check(probe.ownerActive)迁移账本与回归合同
迁移不是“能编译”就结束。每一项记录原书API、2022年行为、现代替代、行为差异、验证样本和回退条件。尤其要覆盖状态恢复、手势阈值、返回栈、主题角色与第三方组件退役。
原书节点: 第1章 全新的Android UI框架
原书版本: Compose 2022 首版语境
现代候选: 待依赖矩阵验证
不变量: 状态结果、可访问语义、生命周期所有权
证据: 状态到UI映射、编译配置、预览与设备结果、版本目录、View与Compose双向边界
回退: 任一不变量失败即恢复原实现本章回顾
回顾时不要从API清单开始,而要从一个状态变化或用户事件开始,依次回答谁拥有状态、哪些调用进入组合、约束如何传递、像素或导航结果怎样产生、外部工作何时取消。再用状态到UI映射、编译配置、预览与设备结果、版本目录、View与Compose双向边界复核;任何无法重放的结论都退回实验阶段。
复习与独立交接
练习
问题 1:本页为什么必须按18个目录节点学习?
问题 2:本页最小正确性合同是什么?
问题 3:哪个反例最能推翻错误实现?
问题 4:为什么一次截图或一次流畅运行不是证据?
问题 5:怎样升级Compose而不改写原书?
问题 6:独立交接需要哪些产物?
名词解释
本章出现的专业名词,用大白话再讲一遍。
- 声明式UI
- 以状态为输入描述界面结果,由框架负责把状态变化映射为界面更新。
- Composable
- 由Compose编译器参与转换、可进入组合树的带Composable注解函数。
- Slot API
- 通过内容lambda向调用者开放结构插槽而不是依赖继承扩展组件。
- Preview
- 在受限设计时环境中渲染可组合函数并快速核对状态样本的工具。
- 互操作边界
- Compose树与传统View树相互嵌入并传递状态、事件和生命周期的接缝。