Android Jetpack

【Android】Jetpack Compose 入門教學 基本 UI 元件範例

【Android】Jetpack Compose 入門教學 基本 UI 元件範例

Jetpack Compose 是 Google 推出的現代化 Android UI 框架,採用宣告式寫法取代傳統 XML 佈局,大幅簡化 UI 開發流程。本篇整理常用的基本元件範例,讓你快速上手。


文章目錄

  1. 環境需求
  2. 建立 Compose 專案
  3. Text 文字
  4. Button 按鈕
  5. TextField 輸入框
  6. Image 圖片
  7. Column / Row 排版
  8. 完整範例

1. 環境需求

  • Android Studio Hedgehog 以上
  • Kotlin 1.9+
  • Compose BOM 2024.02.00 以上

2. 建立 Compose 專案

build.gradle.kts 加入依賴:

dependencies {
    implementation(platform("androidx.compose:compose-bom:2024.02.00"))
    implementation("androidx.compose.ui:ui")
    implementation("androidx.compose.material3:material3")
    implementation("androidx.activity:activity-compose:1.8.2")
}

3. Text 文字

@Composable
fun TextExample() {
    Text(
        text = "Hello Compose!",
        fontSize = 24.sp,
        fontWeight = FontWeight.Bold,
        color = Color.Blue
    )
}

4. Button 按鈕

@Composable
fun ButtonExample() {
    var count by remember { mutableStateOf(0) }

    Button(onClick = { count++ }) {
        Text(text = "點擊次數:$count")
    }
}

5. TextField 輸入框

@Composable
fun TextFieldExample() {
    var text by remember { mutableStateOf("") }

    TextField(
        value = text,
        onValueChange = { text = it },
        label = { Text("請輸入文字") },
        placeholder = { Text("輸入...") }
    )
}

6. Image 圖片

@Composable
fun ImageExample() {
    Image(
        painter = painterResource(id = R.drawable.ic_launcher_foreground),
        contentDescription = "圖片描述",
        modifier = Modifier
            .size(100.dp)
            .clip(CircleShape)
    )
}

7. Column / Row 排版

// 垂直排列
@Composable
fun ColumnExample() {
    Column(
        modifier = Modifier.fillMaxWidth(),
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Text("第一行")
        Text("第二行")
        Text("第三行")
    }
}

// 水平排列
@Composable
fun RowExample() {
    Row(
        modifier = Modifier.fillMaxWidth(),
        horizontalArrangement = Arrangement.SpaceEvenly
    ) {
        Text("左")
        Text("中")
        Text("右")
    }
}

8. 完整範例

@Composable
fun MainScreen() {
    var inputText by remember { mutableStateOf("") }
    var displayText by remember { mutableStateOf("") }

    Column(
        modifier = Modifier
            .fillMaxSize()
            .padding(16.dp),
        horizontalAlignment = Alignment.CenterHorizontally,
        verticalArrangement = Arrangement.Center
    ) {
        Text(
            text = "Jetpack Compose 範例",
            fontSize = 24.sp,
            fontWeight = FontWeight.Bold
        )

        Spacer(modifier = Modifier.height(16.dp))

        TextField(
            value = inputText,
            onValueChange = { inputText = it },
            label = { Text("請輸入文字") }
        )

        Spacer(modifier = Modifier.height(16.dp))

        Button(onClick = { displayText = inputText }) {
            Text("送出")
        }

        Spacer(modifier = Modifier.height(16.dp))

        if (displayText.isNotEmpty()) {
            Text(
                text = "你輸入了:$displayText",
                color = Color.Green
            )
        }
    }
}

// 在 Activity 中使用
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MainScreen()
        }
    }
}

相關連結

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *