Android compose入門學(xué)習(xí)

Jetpack Compose 是用于構(gòu)建原生 Android 界面的新工具包。它使用更少的代碼、強大的工具和直觀的 Kotlin API,可以幫助您簡化并加快 Android 界面開發(fā)。

由于 Compose 基于 Kotlin 構(gòu)建,因此可以與 Java 編程語言完全互操作,并且可以直接訪問所有 Android 和 Jetpack API。它與現(xiàn)有的 UI 工具包也是完全兼容的,因此你可以混合原來的 View 和現(xiàn)在新的View。學(xué)過Flutter的就會發(fā)現(xiàn),Compose的寫法跟Flutter的寫法如出一轍。

引入Compose功能

1.創(chuàng)建Compse項目
2.gradle配置

在app下的build.gradle的Android塊中添加,

    buildFeatures {
        compose true
    }

并引入Compose的相關(guān)引用,compose_version為1.0.0

    androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
    debugImplementation "androidx.compose.ui:ui-tooling:$compose_version"
    implementation "androidx.compose.ui:ui:$compose_version"
    implementation "androidx.compose.material:material:$compose_version"
    implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"
Composable 組合函數(shù)

1.Compose函數(shù)不同于普通的函數(shù),它需要使用大寫字母開頭,和普通函數(shù)做區(qū)分。
2.Compose函數(shù)需要使用@Composable注解修飾,表示這是一個可組合函數(shù)。

@Composable
fun UIUse() {

}
Preview函數(shù)

@Preview表示該函數(shù)可以在Android Studio中預(yù)覽。

@Preview
@Composable
fun UIUse() {

}

基礎(chǔ)控件的使用

  • 在setContent中添加當(dāng)前頁面的根布局
setContent { }
  • 添加Text文本組件
Text("XML Layout")
        Text("Android Devs")
        Text("Jetpack Compose")
  • Box類似于Android中的ViewGroup,它是一個視圖容器,可以在其中裝載其他的組件
Box(
                modifier = Modifier
                    .background(Color.Yellow)
                    .size(200.dp)
            ) {
                Text("XML Layout")
            }
  • 添加圖片使用Image
Image(
            painter = painterResource(id = R.mipmap.test),
            contentDescription = "這是內(nèi)容",
            modifier = Modifier
                .size(150.dp, 110.dp)
                .clip(RectangleShape),
            contentScale = ContentScale.Crop
        )
  • Column、Row
    Column可以創(chuàng)建一個垂直布局,Row可以創(chuàng)建一個水平布局。
    同樣有Modifier.padding().width().border().background()等屬性。
    horizontalAlignment = Alignment.CenterHorizontally表示水平居中對齊;
    verticalAlignment = Alignment.CenterVertically表示垂直居中對齊。
Column(Modifier.padding(10.dp, 50.dp)
        , horizontalAlignment = Alignment.CenterHorizontally) {

}

結(jié)合起來后:

@Preview
@Composable
fun UIUse() {

    Column(Modifier.padding(10.dp, 50.dp)
        , horizontalAlignment = Alignment.CenterHorizontally) {
        Image(
            painter = painterResource(id = R.mipmap.test),
            contentDescription = "這是內(nèi)容",
            modifier = Modifier
                .size(150.dp, 110.dp)
                .clip(RectangleShape),
            contentScale = ContentScale.Crop
        )

        Text("XML Layout")
        Text("Android Devs")
        Text("Jetpack Compose")

        Row(verticalAlignment = Alignment.CenterVertically) {
            Box(
                modifier = Modifier
                    .background(Color.Yellow)
                    .size(200.dp)
            ) {
                Text("XML Layout")
            }
        }
    }
}

樣式為:


  • 創(chuàng)建列表:
    可使用LazyColumn或者LazyRow來實現(xiàn)垂直、水平列表
@Composable
fun listViewUse() {
    var list = ArrayList<String>()
    list.add("Android")
    list.add("Compose")
    list.add("XMLLayout")

    LazyColumn {
        items(list) { name->
            messageCard(name)
        }
    }
}

@Composable
fun messageCard(name: String) {
    Row(modifier = Modifier.padding(all = 12.dp)) {
        Image(
            painter = painterResource(id = R.mipmap.test_head),
            contentDescription = name,
            modifier = Modifier
                .size(42.dp)
                .clip(CircleShape)
                .border(1.5.dp, MaterialTheme.colors.secondary, CircleShape),
            contentScale = ContentScale.Crop
        )

        Spacer(modifier = Modifier.width(10.dp))
        
        Column {
            Text(text = name,
                color = MaterialTheme.colors.secondaryVariant,
                style = MaterialTheme.typography.subtitle2,
                fontSize = 16.sp)

            Spacer(modifier = Modifier.width(12.dp))

            Text(text = "這里是文本內(nèi)容",
                fontSize = 11.sp)
        }
    }
}

樣式為:


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

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

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