Compose概念
Jetpack Compose是一个适用于Android的新式声明性界面工具包。Compose提供声明性API,让你可以不以命令方式改变前端的情况下呈现应用界面,从而使编写和维护应用界面变得更加容易。
命令式UI:即像我们之前常规的开发方式——xml+kotlin(java)后台。长期以来,Android视图层次结构可以表示为界面微件树(a tree of UI widgets)。由于应用的状态会因用户交互等因素而发生变化,因此界面层次结构需要进行更新以显示当前数据。最常见的界面更新方式是使用findViewById等函数遍历数,并通过调用button.setText(String)、img.setImageBitmap(Bitmap)等方式更改结点。通过在类模块对控件进行操作。
声明式UI:上方提及的传统的声明式UI,相信大家都看出来前后端被分割为两个模块,而声明式UI则是尽最大能力将前后端融合为一个整体,通过@Composable为主的注解将UI界面的设计规范为kotlin语言,见下图
其实,swiftUI与flutter等早已采用声明式UI,所以声明式UI必将是未来的发展趋势。
Compose的快速入门
Jetpack Compose是用于构建原生Android界面的新工具包。它使用更少的代码、强大的工具和直观的kotlin API,可以帮助我们简化并加快Android界面开发
可组合函数
Jetpack Compose是围绕可组合函数构建的。这些函数可以让我们以程序化方式定义界面,只需要描述应用界面的外观并提供数据依赖项,而不必关注界面的构造过程(初始化元素,将其附加到父项等)。只需将@Compose注解添加到函数名称中即可。
添加文本元素
setContent块定义了Activity的布局,我们会在其中调用可组合函数。可组合函数只能从其他可组合函数调用。
Compose界面库定义的Text()函数会在屏幕显示一个文本标签。
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Compose1Theme {
// A surface container using the 'background' color from the theme
Surface(color = MaterialTheme.colors.background) {
Greeting("Android")
}
}
}
}
}
//定义可组合函数
@Composable
fun Greeting(name: String) {
Text(text = "Hello $name!")
}
在Android Studio中预览函数
在上述案例中,如果想要预览Greeting()函数,则需要创建另一个函数,并由此函数调用Greeting()函数,并且需要在该函数的@Compose上方添加@Preview注解。
//定义可组合函数
@Composable
fun Greeting(name: String) {
Text(text = "Hello $name!")
}
//预览可组合函数
@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
Compose1Theme {
Greeting("Android")
}
}
总结:其实,作者自我感觉compose的代码风格有点像以前的自定义view和自定义viewgroup。但是compose却比那些简单多了,许多东西都可以使用系统的配置,剩下的由系统帮我们完成,比如在canvas中不用再测量布局、绘制等麻烦的步骤,只用配置参数即可。