序
写这些博客的目的,主要是是为了学习、记录和分享。看到一些大神的博客,有的甚至过去10多年了,仍然有很多人访问,很多人阅读,不由心向往之。所以自己也尝试着写一写。
对于JetPack Compose,我现在也只是一个初学者、好奇者。这些关于JetPack Compose的学习笔记,是在自己的理解上,对官方文档加以概括和总结。所以这些笔记并不在于追求全面、完整和精确。有所侧重也是必然的。又受时间、精力所限,它们也没有精确的结构划分。某种程度上,可以说是写到哪算哪。如果能吸引到一些朋友,那也是令人高兴的事。
简单介绍一下JetPack Compose(后续简称为Compose)。Compose是Google近几年推出的、采用Kotlin编写的一款新的声明式界面工具包。顾名思义,它是工作在View层面的,旨在替代原来的Android View-ViewGroup体系结构。它的主旨是通过状态的改变,来驱动界面更新,并且这是唯一的方式。UI一旦确定,之后不能再更改。Activity都拿不到这些UI组件的引用,无法调用它们的成员方法。以前View体系中的硬代码方式、addView、removeView、findView等都不能使用了。这种方式的好处是将所有的控制权从开发者手中收回,放置在Compose 工具包中,能避免一些错误,并且一切都变得可控了。如果数据发生了改变,需要更新界面,那么修改对应的状态即可。这种思想现在变得非常的流行,比如Flutter中的Dart语言描述的UI Widget树、React Native中JS描述的控件树,都是类似的设计。Compose也算是赶赶时髦。
那么Compose和原来的View体系是什么关系呢?答案是:Compose是View体系的一种延伸,一种变体。ComposeView是Compose UI的核心和基础,而它是ViewGroup的间接子类。看到这里,应该可以理解了。ComposeView是一种特殊的ViewGoup,Compose并没有完全从View体系独立出去。这种特殊的ViewGoup,也是遵循原来View体系的measure、layout、draw三大基本过程的,事件分发等也一样。不过从ComposeView起,几乎所有的子组件都发生了变动,遵循新的设计思想。
接着介绍一下Composable,它的中文翻译是“可组合项”。这些可组合项,是指可以在ComposeView中使用的项。Compose不再使用xml来描述界面,而是用Composable来代替。Composable Function(可组合项函数)就是用来生成、配置、组合这些Composable的。将一个函数加上一个@Composable注解,就表示它是一个可组合项函数。函数体包含各种Composable的创建、排列以及样式设置等。
最后说明一下,这些笔记的顺序,是和我当前的学习进度相关的。一些在此之前学习过的,就没有写出来。后续如果有时间,可能会考虑整理出来。