Android Compose UI 佈局 (Column, Row, Box)
在 Compose 中,我們不使用 XML 佈局檔(如 LinearLayout, RelativeLayout)。取而代之的是,我們使用 Kotlin 的 Layout Composables 來排列元件。
最基礎的三大金剛是:Column, Row, Box。
Column (垂直排列)
Column 將子元件垂直堆疊,類似 LinearLayout (vertical)。
Column(
modifier = Modifier.padding(16.dp),
verticalArrangement = Arrangement.Center, // 垂直置中
horizontalAlignment = Alignment.CenterHorizontally // 水平置中
) {
Text("Title")
Text("Subtitle")
Button(onClick = {}) { Text("Click") }
}
常用屬性
- verticalArrangement:控制子元件在垂直軸上的分佈(Top, Bottom, Center, SpaceEvenly, SpaceBetween, SpaceAround)。
- horizontalAlignment:控制子元件在水平軸上的對齊(Start, End, CenterHorizontally)。
Row (水平排列)
Row 將子元件水平排列,類似 LinearLayout (horizontal)。
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween, // 左右分散對齊
verticalAlignment = Alignment.CenterVertically // 垂直置中
) {
Text("Left")
Text("Right")
}
常用屬性
- horizontalArrangement:控制子元件在水平軸上的分佈。
- verticalAlignment:控制子元件在垂直軸上的對齊(Top, Bottom, CenterVertically)。
Box (堆疊排列)
Box 將子元件堆疊在彼此上方,類似 FrameLayout。通常用於放置背景圖片,或在右上角顯示 Badge。
Box(
modifier = Modifier.size(100.dp),
contentAlignment = Alignment.Center // 預設對齊方式
) {
Image(painter = painterResource(id = R.drawable.bg), contentDescription = null)
Text("Overlay Text") // 會顯示在圖片上方
}
Modifier.align
在 Box 內部的子元件,可以使用 Modifier.align 來個別指定位置:
Box(modifier = Modifier.fillMaxSize()) {
Text("TopLeft", modifier = Modifier.align(Alignment.TopStart))
Text("Center", modifier = Modifier.align(Alignment.Center))
Text("BottomRight", modifier = Modifier.align(Alignment.BottomEnd))
}
Weight (權重)
在 Column 或 Row 中,我們可以使用 Modifier.weight 來分配剩餘空間(類似 LinearLayout 的 weight)。
Row(modifier = Modifier.fillMaxWidth()) {
// 佔用 1 等份
Box(modifier = Modifier.weight(1f).background(Color.Red))
// 佔用 2 等份 (紅色寬度的兩倍)
Box(modifier = Modifier.weight(2f).background(Color.Blue))
}
總結
- Column:由上到下。
- Row:由左到右。
- Box:前後堆疊。
只要靈活運用這三個基礎容器,配合 Modifier,你就能構建出絕大多數的複雜介面。