Compose概念
Jetpack Compose是一個適用于Android的新式聲明性界面工具包。Compose提供聲明性API,讓你可以不以命令方式改變前端的情況下呈現(xiàn)應(yīng)用界面,從而使編寫和維護應(yīng)用界面變得更加容易。
命令式UI:即像我們之前常規(guī)的開發(fā)方式——xml+kotlin(java)后臺。長期以來,Android視圖層次結(jié)構(gòu)可以表示為界面微件樹(a tree of UI widgets)。由于應(yīng)用的狀態(tài)會因用戶交互等因素而發(fā)生變化,因此界面層次結(jié)構(gòu)需要進行更新以顯示當(dāng)前數(shù)據(jù)。最常見的界面更新方式是使用findViewById等函數(shù)遍歷數(shù),并通過調(diào)用button.setText(String)、img.setImageBitmap(Bitmap)等方式更改結(jié)點。通過在類模塊對控件進行操作。
聲明式UI:上方提及的傳統(tǒng)的聲明式UI,相信大家都看出來前后端被分割為兩個模塊,而聲明式UI則是盡最大能力將前后端融合為一個整體,通過@Composable為主的注解將UI界面的設(shè)計規(guī)范為kotlin語言,見下圖
image.png
其實,swiftUI與flutter等早已采用聲明式UI,所以聲明式UI必將是未來的發(fā)展趨勢。
Compose的快速入門
Jetpack Compose是用于構(gòu)建原生Android界面的新工具包。它使用更少的代碼、強大的工具和直觀的kotlin API,可以幫助我們簡化并加快Android界面開發(fā)
可組合函數(shù)
Jetpack Compose是圍繞可組合函數(shù)構(gòu)建的。這些函數(shù)可以讓我們以程序化方式定義界面,只需要描述應(yīng)用界面的外觀并提供數(shù)據(jù)依賴項,而不必關(guān)注界面的構(gòu)造過程(初始化元素,將其附加到父項等)。只需將@Compose注解添加到函數(shù)名稱中即可。
添加文本元素
setContent塊定義了Activity的布局,我們會在其中調(diào)用可組合函數(shù)。可組合函數(shù)只能從其他可組合函數(shù)調(diào)用。
Compose界面庫定義的Text()函數(shù)會在屏幕顯示一個文本標(biāo)簽。
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")
}
}
}
}
}
//定義可組合函數(shù)
@Composable
fun Greeting(name: String) {
Text(text = "Hello $name!")
}

在Android Studio中預(yù)覽函數(shù)
在上述案例中,如果想要預(yù)覽Greeting()函數(shù),則需要創(chuàng)建另一個函數(shù),并由此函數(shù)調(diào)用Greeting()函數(shù),并且需要在該函數(shù)的@Compose上方添加@Preview注解。
//定義可組合函數(shù)
@Composable
fun Greeting(name: String) {
Text(text = "Hello $name!")
}
//預(yù)覽可組合函數(shù)
@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
Compose1Theme {
Greeting("Android")
}
}
總結(jié):其實,作者自我感覺compose的代碼風(fēng)格有點像以前的自定義view和自定義viewgroup。但是compose卻比那些簡單多了,許多東西都可以使用系統(tǒng)的配置,剩下的由系統(tǒng)幫我們完成,比如在canvas中不用再測量布局、繪制等麻煩的步驟,只用配置參數(shù)即可。
