Layouts
1. Column
Phần tiêu đề “1. Column”Xếp các children theo chiều dọc:
@Composablefun ColumnExample() { Column( modifier = Modifier .fillMaxSize() .padding(16.dp), verticalArrangement = Arrangement.SpaceBetween, horizontalAlignment = Alignment.CenterHorizontally ) { Text("Item 1") Text("Item 2") Text("Item 3") }}Vertical Arrangement
Phần tiêu đề “Vertical Arrangement”Arrangement.TopArrangement.CenterArrangement.BottomArrangement.SpaceBetweenArrangement.SpaceAroundArrangement.SpaceEvenlyArrangement.spacedBy(8.dp)
2. Row
Phần tiêu đề “2. Row”Xếp các children theo chiều ngang:
@Composablefun RowExample() { Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceEvenly, verticalAlignment = Alignment.CenterVertically ) { Icon(Icons.Default.Home, "Home") Icon(Icons.Default.Search, "Search") Icon(Icons.Default.Settings, "Settings") }}3. Box
Phần tiêu đề “3. Box”Xếp chồng các children:
@Composablefun BoxExample() { Box( modifier = Modifier .size(200.dp) .background(Color.LightGray), contentAlignment = Alignment.Center ) { Text("Background") Icon( Icons.Default.Star, null, modifier = Modifier.align(Alignment.TopEnd) ) }}4. LazyColumn (RecyclerView)
Phần tiêu đề “4. LazyColumn (RecyclerView)”Danh sách cuộn dọc với lazy loading:
@Composablefun LazyColumnExample(items: List<String>) { LazyColumn( modifier = Modifier.fillMaxSize(), contentPadding = PaddingValues(16.dp), verticalArrangement = Arrangement.spacedBy(8.dp) ) { items(items) { item -> Card(modifier = Modifier.fillMaxWidth()) { Text(item, modifier = Modifier.padding(16.dp)) } } }}LazyColumn với items khác nhau
Phần tiêu đề “LazyColumn với items khác nhau”@Composablefun MixedLazyColumn() { LazyColumn { item { Text("Header", style = MaterialTheme.typography.headlineMedium) }
items(10) { index -> Text("Item $index") }
item { Text("Footer") } }}5. LazyRow
Phần tiêu đề “5. LazyRow”Danh sách cuộn ngang:
@Composablefun LazyRowExample() { LazyRow( contentPadding = PaddingValues(horizontal = 16.dp), horizontalArrangement = Arrangement.spacedBy(8.dp) ) { items(10) { index -> Card(modifier = Modifier.size(100.dp)) { Box(contentAlignment = Alignment.Center) { Text("$index") } } } }}6. LazyVerticalGrid
Phần tiêu đề “6. LazyVerticalGrid”Lưới cuộn dọc:
@Composablefun GridExample() { LazyVerticalGrid( columns = GridCells.Fixed(2), // 2 cột // hoặc GridCells.Adaptive(minSize = 128.dp) contentPadding = PaddingValues(16.dp), horizontalArrangement = Arrangement.spacedBy(8.dp), verticalArrangement = Arrangement.spacedBy(8.dp) ) { items(20) { index -> Card(modifier = Modifier.aspectRatio(1f)) { Box(contentAlignment = Alignment.Center) { Text("$index") } } } }}7. Scaffold
Phần tiêu đề “7. Scaffold”Layout structure với TopBar, BottomBar, FAB:
@Composablefun ScaffoldExample() { Scaffold( topBar = { TopAppBar( title = { Text("App Title") }, navigationIcon = { IconButton(onClick = { }) { Icon(Icons.Default.Menu, "Menu") } } ) }, bottomBar = { NavigationBar { NavigationBarItem( selected = true, onClick = { }, icon = { Icon(Icons.Default.Home, null) }, label = { Text("Home") } ) } }, floatingActionButton = { FloatingActionButton(onClick = { }) { Icon(Icons.Default.Add, "Add") } } ) { paddingValues -> // Main content Box(modifier = Modifier.padding(paddingValues)) { Text("Content") } }}8. ConstraintLayout
Phần tiêu đề “8. ConstraintLayout”Layout phức tạp với constraints:
@Composablefun ConstraintLayoutExample() { ConstraintLayout(modifier = Modifier.fillMaxSize()) { val (image, title, button) = createRefs()
Image( painter = painterResource(R.drawable.image), contentDescription = null, modifier = Modifier.constrainAs(image) { top.linkTo(parent.top) start.linkTo(parent.start) end.linkTo(parent.end) } )
Text( "Title", modifier = Modifier.constrainAs(title) { top.linkTo(image.bottom, margin = 16.dp) start.linkTo(parent.start) } )
Button( onClick = { }, modifier = Modifier.constrainAs(button) { bottom.linkTo(parent.bottom, margin = 16.dp) end.linkTo(parent.end, margin = 16.dp) } ) { Text("Action") } }}9. Modifier Chains
Phần tiêu đề “9. Modifier Chains”@Composablefun ModifierExample() { Box( modifier = Modifier .fillMaxWidth() .height(200.dp) .padding(16.dp) .clip(RoundedCornerShape(12.dp)) .background(Color.Blue) .border(2.dp, Color.Black, RoundedCornerShape(12.dp)) .clickable { } )}10. Weight trong Row/Column
Phần tiêu đề “10. Weight trong Row/Column”@Composablefun WeightExample() { Row(modifier = Modifier.fillMaxWidth()) { Box( modifier = Modifier .weight(1f) .height(50.dp) .background(Color.Red) ) Box( modifier = Modifier .weight(2f) .height(50.dp) .background(Color.Blue) ) }}📝 Tóm tắt
Phần tiêu đề “📝 Tóm tắt”| Layout | Mô tả |
|---|---|
| Column | Xếp dọc |
| Row | Xếp ngang |
| Box | Xếp chồng |
| LazyColumn | List cuộn dọc |
| LazyRow | List cuộn ngang |
| LazyVerticalGrid | Grid |
| Scaffold | App structure |
| ConstraintLayout | Complex layouts |