Anda dapat menentukan konfigurasi penampung Petak untuk membuat tata letak fleksibel yang merespons berbagai ukuran layar dan jenis konten. Halaman ini menjelaskan cara melakukan hal berikut:
- Menentukan petak: Siapkan struktur dasar baris dan kolom.
- Menempatkan item dalam petak: Pahami cara menempatkan item ke dalam sel petak dan cara mengubah arah alur.
- Mengelola ukuran jalur: Gunakan ukuran tetap, fraksional, fleksibel, dan intrinsik untuk menetapkan ukuran jalur.
- Menetapkan jarak: Kelola "ruang kosong" di antara baris dan kolom.
Menentukan petak
Petak terdiri dari kolom dan baris.
Composable Grid memiliki parameter config
yang menerima lambda untuk menentukan kolom dan baris
dalam GridConfigurationScope.
Contoh berikut menentukan petak yang memiliki tiga baris dan dua kolom,
masing-masing dengan ukuran tetap yang ditentukan dalam Dp:
Grid( config = { repeat(2) { column(160.dp) } repeat(3) { row(90.dp) } } ) { }
Menempatkan item dalam petak
Grid mengambil elemen UI
dalam lambda content dan menempatkannya ke dalam sel petak.
Petak mengatur item terlepas dari
apakah Anda telah menentukan baris dan kolom secara eksplisit.
Secara default,
Grid mencoba menempatkan elemen UI di sel petak yang tersedia di baris;
jika tidak dapat, Grid akan menempatkannya di sel petak yang tersedia di baris berikutnya.
Jika tidak ada sel kosong, Grid akan membuat baris baru.
Dalam contoh berikut, petak memiliki enam sel petak
dan menempatkan kartu ke setiap sel (Gambar 1).
Setiap sel petak berukuran 160dp x 90dp,
sehingga total ukuran petak adalah 320dp x 270dp.
Grid( config = { repeat(2) { column(160.dp) } repeat(3) { row(90.dp) } } ) { Card1() Card2() Card3() Card4() Card5() Card6() }
Untuk mengubah perilaku default ini menjadi pengisian menurut kolom,
tetapkan properti flow ke GridFlow.Column.
Grid( config = { repeat(2) { column(160.dp) } repeat(3) { row(90.dp) } gap(8.dp) flow = GridFlow.Column // Grid tries to place items to fill the column }, ) { Card1() Card2() Card3() Card4() Card5() Card6() }
GridFlow.Row (kiri) dan GridFlow.Column (kanan).
Mengelola ukuran trek
Baris dan kolom secara kolektif disebut sebagai jalur petak. Anda dapat menentukan ukuran jalur petak menggunakan salah satu metode berikut:
- Tetap (
Dp): Mengalokasikan ukuran tertentu (misalnya,column(180.dp)). - Pecahan (
Float): Mengalokasikan persentase total ruang yang tersedia dari0.0fhingga1.0f(misalnya,row(0.5f)untuk 50%). - Fleksibel (
Fr): Mendistribusikan ruang yang tersisa secara proporsional setelah jalur tetap dan pecahan dihitung. Misalnya, jika dua baris disetel ke1.frdan3.fr, baris terakhir akan menerima 75% dari tinggi yang tersisa. - Intrinsik: Mengatur ukuran jalur berdasarkan konten di dalamnya. Untuk mengetahui informasi selengkapnya, lihat Menentukan ukuran jalur petak secara intrinsik.
Contoh berikut menggunakan berbagai opsi ukuran trek untuk menentukan tinggi baris:
Grid( config = { column(1f) row(100.dp) row(0.2f) row(1.fr) row(GridTrackSize.Auto) }, modifier = Modifier.height(480.dp) ) { PastelRedCard("Fixed(100.dp)")
Grid.
Menentukan ukuran jalur petak secara intrinsik
Anda dapat menggunakan pengukuran intrinsik untuk Grid
jika Anda ingin tata letak beradaptasi dengan konten,
daripada memaksanya masuk ke dalam penampung tetap.
Ukuran jalur petak ditentukan dengan nilai berikut:
GridTrackSize.MaxContent: Gunakan ukuran intrinsik maksimum konten (misalnya, lebar ditentukan oleh panjang penuh teks dalam blok teks tanpa pengemasan).GridTrackSize.MinContent: Menggunakan ukuran intrinsik minimum konten (misalnya, lebar ditentukan oleh satu kata terpanjang dalam blok teks).GridTrackSize.Auto: Gunakan ukuran fleksibel untuk jalur yang beradaptasi berdasarkan ruang yang tersedia. Secara default, berperilaku sepertiMaxContent, tetapi mengecilkan dan membungkus kontennya agar sesuai dengan penampung induk.
Contoh berikut menempatkan dua teks berdampingan. Ukuran kolom untuk teks pertama ditentukan oleh lebar minimum yang diperlukan untuk menampilkan teks, dan lebar kolom kedua bergantung pada lebar maksimum teks yang diperlukan.
Grid( config = { column(GridTrackSize.MinContent) column(GridTrackSize.MaxContent) row(1.0f) }, modifier = Modifier.width(480.dp) ) { Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras imperdiet." ) Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras imperdiet." ) }
Menetapkan jarak antar-baris dan kolom
Setelah ukuran trek petak ditentukan,
Anda dapat mengubah jarak petak untuk menyempurnakan jarak antar-trek.
Anda dapat menentukan jarak kolom dengan fungsi columnGap,
dan jarak baris dengan rowGap. Dalam contoh berikut,
ada jarak 16dp di antara setiap baris,
dan jarak 8dp di antara setiap kolom (Gambar 5).
Grid( config = { repeat(2) { column(160.dp) } repeat(3) { row(90.dp) } rowGap(16.dp) columnGap(8.dp) } ) { Card1() Card2() Card3() Card4() Card5() Card6() }
Anda juga dapat menggunakan fungsi praktis gap
untuk menentukan celah dengan ukuran kolom dan baris yang sama,
serta untuk menentukan ukuran kolom dan celah secara terpisah menggunakan satu fungsi.
Kode berikut menambahkan celah 8dp ke petak:
Grid( config = { repeat(2) { column(160.dp) } repeat(3) { row(90.dp) } gap(8.dp) // Equivalent to columnGap(8.dp) and rowGap(8.dp) } ) { Card1() Card2() Card3() Card4() Card5() Card6() }