Gunakan Modifier.flex untuk mengontrol cara item mengubah ukuran, urutan, dan disejajarkan
di dalam FlexBox.
Ukuran item
Gunakan fungsi basis, grow, dan shrink untuk mengontrol ukuran item.
FlexBox { RedRoundedBox( modifier = Modifier.flex { basis(FlexBasis.Auto) grow(1.0f) shrink(0.5f) } ) }
Menetapkan ukuran awal
Gunakan basis untuk menentukan ukuran awal item sebelum ruang tambahan
didistribusikan. Anda dapat menganggapnya sebagai ukuran pilihan item.
Jenis nilai |
Perilaku |
Cuplikan kode Catatan: Kotak memiliki ukuran intrinsik maksimum |
Contoh penggunaan lebar penampung |
(default) |
Gunakan ukuran intrinsik maksimum item. Misalnya, lebar intrinsik maksimum composable |
FlexBox { RedRoundedBox( Modifier.flex { basis(FlexBasis.Auto) } ) BlueRoundedBox( Modifier.flex { basis(FlexBasis.Auto) } ) } |
|
Memperbaiki |
Ukuran tetap dalam Dp. |
FlexBox { RedRoundedBox( Modifier.flex { basis(200.dp) } ) BlueRoundedBox( Modifier.flex { basis(100.dp) } ) } |
|
Persentase |
Persentase ukuran penampung. |
FlexBox { RedRoundedBox( Modifier.flex { basis(0.7f) } ) BlueRoundedBox( Modifier.flex { basis(0.3f) } ) } |
|
Jika nilai dasar kurang dari ukuran minimum intrinsik item, ukuran minimum intrinsik akan digunakan. Misalnya, jika item Text yang berisi kata
memerlukan 50dp untuk ditampilkan, tetapi juga memiliki basis = 10.dp, nilai
50dp akan digunakan.
Perbesar item jika ada ruang
Gunakan grow untuk menentukan seberapa besar item bertambah saat ada ruang ekstra. Ini adalah
ruang yang tersisa di penampung FlexBox setelah semua nilai basis item
ditambahkan. Nilai grow menunjukkan seberapa banyak ruang tambahan yang akan diterima
turunan tertentu, relatif terhadap turunannya. Secara default, item tidak akan
bertambah.
Contoh berikut menunjukkan FlexBox dengan tiga item turunan. Masing-masing memiliki nilai dasar 100dp. Anak pertama memiliki nilai grow positif. Karena hanya ada
satu turunan dengan nilai grow, nilai sebenarnya tidak relevan - selama
nilainya positif, turunan akan menerima semua ruang tambahan.
Gambar menunjukkan perilaku FlexBox saat ukuran penampungnya adalah 600dp.
FlexBox { RedRoundedBox( title = "400dp", modifier = Modifier.flex { grow(1f) } ) BlueRoundedBox(title = "100dp") GreenRoundedBox(title = "100dp") } |
Setiap turunan memiliki nilai dasar
Turunan 1 bertambah sebesar
|
Dalam contoh berikut, ukuran penampung dan ukuran basis sama. Perbedaannya adalah setiap turunan memiliki nilai grow yang berbeda.
FlexBox { RedRoundedBox( title = "150dp", modifier = Modifier.flex { grow(1f) } ) BlueRoundedBox( title = "200dp", modifier = Modifier.flex { grow(2f) } ) GreenRoundedBox( title = "250dp", modifier = Modifier.flex { grow(3f) } ) } |
Setiap turunan memiliki nilai dasar
Total nilai grow adalah 6. Anak 1 bertambah sebesar (1 / 6) * 300 = Anak 2 bertambah sebesar (2 / 6) * 300 = Anak 3 bertambah sebesar (3 / 6) * 300 =
|
Mengecilkan item saat ruang tidak cukup
Gunakan shrink untuk menentukan seberapa banyak item menyusut saat penampung FlexBox
tidak memiliki cukup ruang untuk semua item. shrink berfungsi dengan cara yang sama seperti grow,
tetapi, alih-alih mendistribusikan ruang ekstra ke item, defisit ruang
didistribusikan ke item. Nilai shrink menentukan seberapa besar defisit ruang yang diterima item, atau seberapa besar item akan menyusut. Secara
default, item memiliki nilai shrink sebesar 1f, yang berarti item tersebut menyusut secara merata.
Contoh berikut menunjukkan dua composable Text dengan teks yang sama. Elemen turunan
pertama memiliki nilai penyusutan 1f, yang berarti elemen tersebut menyusut untuk menyerap semua defisit
ruang.
FlexBox { Text( "The quick brown fox", fontSize = 36.sp, modifier = Modifier .background(PastelRed) .flex { shrink(1f) } ) Text( "The quick brown fox", fontSize = 36.sp, modifier = Modifier .background(PastelBlue) .flex { shrink(0f) } ) }
Saat ukuran penampung menyusut, Turunan 1 akan menyusut.
Ukuran penampung |
UI FlexBox |
|
|
|
|
|
|
Penyelarasan item
Gunakan alignSelf untuk mengontrol cara item disejajarkan dengan sumbu silang. Tindakan ini
akan mengganti properti alignItems container untuk item ini. Properti ini
memiliki semua kemungkinan nilai yang sama, dengan tambahan Auto yang mewarisi
perilaku penampung FlexBox.
Misalnya, FlexBox ini memiliki alignItems yang ditetapkan ke Start dan lima turunan
yang mengganti perataan sumbu silang.
FlexBox( config = { alignItems(FlexAlignItems.Start) } ) { RedRoundedBox() BlueRoundedBox(modifier = Modifier.flex { alignSelf(FlexAlignSelf.Center) }) GreenRoundedBox(modifier = Modifier.flex { alignSelf(FlexAlignSelf.End) }) PinkRoundedBox(modifier = Modifier.flex { alignSelf(FlexAlignSelf.Stretch) }) OrangeRoundedBox(modifier = Modifier.flex { alignSelf(FlexAlignSelf.Baseline) }) }

Urutan item
Secara default, FlexBox menata letak item sesuai urutan yang dideklarasikan dalam
kode. Ganti perilaku ini menggunakan order.
Nilai default untuk order adalah nol, dan FlexBox mengurutkan item berdasarkan nilai ini dalam urutan menaik. Setiap item yang memiliki nilai order yang sama akan
ditata dalam urutan yang sama dengan yang dideklarasikan. Gunakan nilai order negatif dan positif untuk memindahkan item ke awal atau akhir tata letak tanpa mengubah tempat item dideklarasikan.
Contoh berikut menunjukkan dua item turunan. Yang pertama memiliki order default
nol, dan yang kedua memiliki urutan -1. Setelah diurutkan, Anak 1 muncul
setelah Anak 2.
FlexBox { // Declared first, but will be placed after visually RedRoundedBox( title = "World" ) // Declared second, but will be placed first visually BlueRoundedBox( title = "Hello", modifier = Modifier.flex { order(-1) } ) }
