01_Compose學(xué)習(xí)筆記序

? ? ? ? 寫這些博客的目的,主要是是為了學(xué)習(xí)、記錄和分享??吹揭恍┐笊竦牟┛?,有的甚至過去10多年了,仍然有很多人訪問,很多人閱讀,不由心向往之。所以自己也嘗試著寫一寫。

? ? ? ? 對(duì)于JetPack Compose,我現(xiàn)在也只是一個(gè)初學(xué)者、好奇者。這些關(guān)于JetPack Compose的學(xué)習(xí)筆記,是在自己的理解上,對(duì)官方文檔加以概括和總結(jié)。所以這些筆記并不在于追求全面、完整和精確。有所側(cè)重也是必然的。又受時(shí)間、精力所限,它們也沒有精確的結(jié)構(gòu)劃分。某種程度上,可以說是寫到哪算哪。如果能吸引到一些朋友,那也是令人高興的事。

? ? ? ? 簡單介紹一下JetPack Compose(后續(xù)簡稱為Compose)。Compose是Google近幾年推出的、采用Kotlin編寫的一款新的聲明式界面工具包。顧名思義,它是工作在View層面的,旨在替代原來的Android View-ViewGroup體系結(jié)構(gòu)。它的主旨是通過狀態(tài)的改變,來驅(qū)動(dòng)界面更新,并且這是唯一的方式。UI一旦確定,之后不能再更改。Activity都拿不到這些UI組件的引用,無法調(diào)用它們的成員方法。以前View體系中的硬代碼方式、addView、removeView、findView等都不能使用了。這種方式的好處是將所有的控制權(quán)從開發(fā)者手中收回,放置在Compose 工具包中,能避免一些錯(cuò)誤,并且一切都變得可控了。如果數(shù)據(jù)發(fā)生了改變,需要更新界面,那么修改對(duì)應(yīng)的狀態(tài)即可。這種思想現(xiàn)在變得非常的流行,比如Flutter中的Dart語言描述的UI Widget樹、React Native中JS描述的控件樹,都是類似的設(shè)計(jì)。Compose也算是趕趕時(shí)髦。

? ? ? ? 那么Compose和原來的View體系是什么關(guān)系呢?答案是:Compose是View體系的一種延伸,一種變體。ComposeView是Compose UI的核心和基礎(chǔ),而它是ViewGroup的間接子類??吹竭@里,應(yīng)該可以理解了。ComposeView是一種特殊的ViewGoup,Compose并沒有完全從View體系獨(dú)立出去。這種特殊的ViewGoup,也是遵循原來View體系的measure、layout、draw三大基本過程的,事件分發(fā)等也一樣。不過從ComposeView起,幾乎所有的子組件都發(fā)生了變動(dòng),遵循新的設(shè)計(jì)思想。

? ? ? ? 接著介紹一下Composable,它的中文翻譯是“可組合項(xiàng)”。這些可組合項(xiàng),是指可以在ComposeView中使用的項(xiàng)。Compose不再使用xml來描述界面,而是用Composable來代替。Composable Function(可組合項(xiàng)函數(shù))就是用來生成、配置、組合這些Composable的。將一個(gè)函數(shù)加上一個(gè)@Composable注解,就表示它是一個(gè)可組合項(xiàng)函數(shù)。函數(shù)體包含各種Composable的創(chuàng)建、排列以及樣式設(shè)置等。

? ? ? ? 最后說明一下,這些筆記的順序,是和我當(dāng)前的學(xué)習(xí)進(jìn)度相關(guān)的。一些在此之前學(xué)習(xí)過的,就沒有寫出來。后續(xù)如果有時(shí)間,可能會(huì)考慮整理出來。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容