版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第AndroidJetpackCompose使用教程講解目錄概況開啟新工程文件結(jié)構(gòu)根結(jié)構(gòu)拆分方法官方四節(jié)課教程細(xì)節(jié)剖析dataclass組件代碼翻譯單例類適配器的替代品簡(jiǎn)單小動(dòng)畫
概況
compose摒棄了原生開發(fā)模式中的xml,代碼結(jié)構(gòu)類似于flutter
compose僅支持kotlin,雖然這玩意語(yǔ)法糖多但是也不難學(xué)
compose可以通過(guò)極短的代碼行數(shù)構(gòu)建完善頁(yè)面
開啟新工程
首先請(qǐng)去android官網(wǎng)下載androidstudio;
官網(wǎng)下載速度是正常的,別擔(dān)心;
之后根據(jù)提示安裝androidsdk以及ndk,如果必須的話你還可以裝一個(gè)模擬器;
把手機(jī)直接連接到電腦上就可以進(jìn)行真機(jī)調(diào)試了(記得把手機(jī)的調(diào)試模式打開);
一切就緒,打開androidstudio,點(diǎn)擊file-new-newproject-emptycomposeactivity
稍等一會(huì),工程很快構(gòu)建完畢
文件結(jié)構(gòu)
創(chuàng)建新工程后,默認(rèn)會(huì)打開MainActivity.kt文件,這是我們的主頁(yè)面
根結(jié)構(gòu)
classMainActivity2:ComponentActivity(){
overridefunonCreate(savedInstanceState:Bundle){
super.onCreate(savedInstanceState)
setContent{
ComposeDemoTheme{
//Asurfacecontainerusingthe'background'colorfromthetheme
Surface(
modifier=Modifier.fillMaxSize(),
color=MaterialTheme.colors.background
Greeting("Android")
}
setContent在這里寫入頁(yè)面內(nèi)容,通過(guò)一個(gè)個(gè)組件逐步構(gòu)造
ComposeDemoTheme表示根據(jù)默認(rèn)主題包中的內(nèi)容進(jìn)行設(shè)置(默認(rèn)主題包就在和mainactivity同級(jí)別的themes文件夾)
Surface構(gòu)建頁(yè)面表面的一個(gè)組件
拆分方法
為了避免組件過(guò)度嵌套導(dǎo)致產(chǎn)生死亡三角,務(wù)必記得把必要的組件拆出來(lái)作為一個(gè)單獨(dú)的方法寫!
方法寫在本activity的class內(nèi)部,那么同文件夾內(nèi)的其他kotlin文件的方法都不會(huì)沖突;
若寫在class外(默認(rèn)),則不同文件夾將可能會(huì)發(fā)生名稱重復(fù)的沖突;
@Composable
funGreeting(name:String){
Text(text="Hello$name!")
加了@Composable注解的方法,表示這是一個(gè)組件,該注解必須添加!
該組件方法內(nèi)使用了text
@Preview(showBackground=true)
@Composable
funDefaultPreview(){
ComposeDemoTheme{
Greeting("Android")
compose內(nèi)置了一個(gè)臨時(shí)預(yù)覽機(jī)制,即preview;
加了@Preview注解的代碼表示該代碼將作為臨時(shí)預(yù)覽而展示;
臨時(shí)預(yù)覽的方法不會(huì)對(duì)最終編譯生成的結(jié)果產(chǎn)生任何影響?。?!
點(diǎn)擊代碼框右上角的split,即可拆分為代碼+預(yù)覽布局
一切就緒后點(diǎn)擊build,即可渲染預(yù)覽頁(yè)面
官方四節(jié)課教程細(xì)節(jié)剖析
官方教程地址:/jetpack/compose/tutorial
dataclass
dataclass類似于typescript的interface,可以理解為定義了一個(gè)對(duì)象;
msg:Message直接將Message作為一個(gè)類型來(lái)使用;
之后直接在setContent里面調(diào)用組件即可!
classMainActivity:ComponentActivity(){
overridefunonCreate(savedInstanceState:Bundle){
super.onCreate(savedInstanceState)
setContent{
MessageCard(Message("Android","JetpackCompose"))
dataclassMessage(valauthor:String,valbody:String)
@Composable
funMessageCard(msg:Message){
Text(text=msg.author)
Text(text=msg.body)
}
組件代碼翻譯
@Composable
funMessageCard(msg:Message){
//使用padding內(nèi)部撐開,all表示四周撐開
Row(modifier=Modifier.padding(all=8.dp)){
Image(
painter=painterResource(R.file_picture),
contentDescription="Contactprofilepicture",
modifier=Modifier
//設(shè)置該組件的大小為40dp
.size(40.dp)
//把圖片變成圓形的
.clip(CircleShape)
//在image和column之間添加一個(gè)水平空格!
Spacer(modifier=Modifier.width(8.dp))
Column{
Text(text=msg.author)
//這里添加的是一個(gè)垂直空格!
Spacer(modifier=Modifier.height(4.dp))
Text(text=msg.body)
}
單例類
教程中我們用到了SampleData,然而由于外網(wǎng)無(wú)法訪問(wèn),數(shù)據(jù)集自然下載不了,但是我們可以簡(jiǎn)單的模擬一個(gè)數(shù)據(jù)集:
object創(chuàng)建單例類;
listOf模擬列表!
objectSampleData{
valconversationData=listOf(
Message(
"jack",
"testname"
Message(
"fakeman",
"idaofihoeqhiodhoehfqow"+
"ehfsdlahfioehfowhfldsahlfhoqeihfo"+
"hodhsafohewqgjlfjdsnvc,mxbgkjwfhw"+
"hoehfsdhfkwejashdhasjhdqwooiadhfoiha"+
"oidosiawqijiojagakfjkladfijslkfh"+
"lwkehflkadshflahfioewhfoadshlfhsa"
}
適配器的替代品
//by表示使用委托,設(shè)置一個(gè)針對(duì)于本compose的全局狀態(tài)
//可以理解為isExpanded是一個(gè)全局變量!
varisExpandedbyremember{mutableStateOf(false)}
//clickable設(shè)置column中項(xiàng)目是否可以點(diǎn)擊,以及點(diǎn)擊后執(zhí)行的代碼
//代碼和vue類似,點(diǎn)一下就反轉(zhuǎn)一下,達(dá)到開啟和收回的效果
Column(modifier=Modifier.clickable{isExpanded=!isExpanded}){
Surface(
shape=MaterialTheme.shapes.medium,
elevation=1.dp,
Text(
text=msg.body,
modifier=Modifier.padding(all=4.dp),
//判斷全局狀態(tài)isExpanded值
//如果isExpanded為true,那么顯示所有行(即展開)
//如果isExpanded為false,那么僅顯示一行(即收縮)
maxLines=if(isExpanded)Int.MAX_VALUEelse1,
style=MaterialTheme.typogra
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 46026-2025家用和類似用途布藝清潔機(jī)
- 大秦醫(yī)院面試題及答案
- C語(yǔ)言基礎(chǔ)選擇測(cè)試題含多知識(shí)點(diǎn)考察及答案
- 感控護(hù)士院感防控知識(shí)試題及答案
- 新疆成人考試真題及答案
- 成都三基試題題庫(kù)附答案
- 市事業(yè)單位招聘考試公共基礎(chǔ)知識(shí)試題題庫(kù)附答案詳解
- 輸血三基考試試題及答案
- 三級(jí)醫(yī)院護(hù)士招聘面試題含答案
- 嵌入式開發(fā)面試題及答案
- 起重設(shè)備安全使用指導(dǎo)方案
- 江蘇省揚(yáng)州市區(qū)2025-2026學(xué)年五年級(jí)上學(xué)期數(shù)學(xué)期末試題一(有答案)
- 干部履歷表(中共中央組織部2015年制)
- GB/T 5657-2013離心泵技術(shù)條件(Ⅲ類)
- GB/T 3518-2008鱗片石墨
- GB/T 17622-2008帶電作業(yè)用絕緣手套
- GB/T 1041-2008塑料壓縮性能的測(cè)定
- 400份食物頻率調(diào)查問(wèn)卷F表
- 滑坡地質(zhì)災(zāi)害治理施工
- 實(shí)驗(yàn)動(dòng)物從業(yè)人員上崗證考試題庫(kù)(含近年真題、典型題)
- 可口可樂(lè)-供應(yīng)鏈管理
評(píng)論
0/150
提交評(píng)論