Row di Jetpack Compose: apa itu, properti composable dan cara kerjanya

Penulis: IT Sectr Diterbitkan: 2026-06-28 Waktu membaca: 10 mnt

Row — adalah fungsi composable di Jetpack Compose untuk menempatkan elemen anak dalam baris horizontal. Berbeda dengan Column, Row menyusun elemen dari kiri ke kanan dan mendukung pengaturan tata letak melalui parameter horizontalArrangement dan verticalAlignment. Menurut Google Android Documentation, 2025, Row adalah salah satu dari tiga kontainer dasar Compose bersama Column dan Box dan digunakan untuk membuat struktur antarmuka horizontal: baris tombol, bidang input, dan ikon dengan teks.

Poin Penting

  • Row — kontainer horizontal Jetpack Compose yang menempatkan elemen anak dalam satu baris dari kiri ke kanan.
  • horizontalArrangement mengatur distribusi elemen secara horizontal: merata, dengan jarak, atau di akhir kontainer.
  • verticalAlignment menyelaraskan elemen secara vertikal terhadap kontainer: tepi atas, tengah, atau tepi bawah.
  • Modifier.weight memungkinkan distribusi ruang yang tersedia antar elemen Row secara proporsional sesuai bobot yang ditentukan.
  • Row efektif untuk membuat baris tombol, daftar ikon, bidang input, dan panel alat horizontal di antarmuka seluler.

Apa itu Row di Jetpack Compose

Row — adalah fungsi composable yang menempatkan elemen anak dalam urutan horizontal. Dalam hierarki tata letak Compose, Row menempati posisi kontainer dasar bersama Column dan Box.

Row tidak memerlukan penentuan ukuran — secara otomatis menyesuaikan dengan konten. Lebar Row sama dengan jumlah lebar elemen anak termasuk jarak, kecuali jika Modifier.fillMaxWidth atau ukuran tetap ditetapkan.

Elemen anak Row dapat memiliki pengubah sendiri yang memengaruhi posisi mereka di dalam kontainer. Misalnya, Modifier.weight memungkinkan elemen mengambil bagian proporsional dari ruang yang tersedia.

Menurut Android Developers Blog, 2024, Row memproses elemen anak secara berurutan, menghitung ukurannya berdasarkan aturan pengukuran Compose: pertama elemen tanpa weight diukur, kemudian ruang tersisa didistribusikan antar elemen dengan weight.

Sintaks dan tanda tangan dasar Row

Tanda tangan dasar Row mencakup parameter modifier, horizontalArrangement dan verticalAlignment. Semua elemen anak diteruskan di blok lambda terakhir content.

kotlin
@Composable
fun RowExample() {
    Row(
        modifier = Modifier.fillMaxWidth().padding(16.dp),
        horizontalArrangement = Arrangement.SpaceEvenly,
        verticalAlignment = Alignment.CenterVertically
    ) {
        Text(text = "Satu")
        Text(text = "Dua")
        Text(text = "Tiga")
    }
}

Properti Row: horizontalArrangement dan verticalAlignment

Parameter horizontalArrangement menentukan bagaimana elemen anak didistribusikan di sepanjang sumbu horizontal di dalam Row. Nilai Start, End, Center, SpaceBetween, SpaceAround dan SpaceEvenly dari kelas Arrangement tersedia.

Arrangement.Start menempatkan elemen di awal kontainer, Arrangement.End — di akhir, dan Arrangement.Center — di tengah. Nilai-nilai ini bekerja mirip dengan properti justify-content di CSS Flexbox.

Arrangement.SpaceBetween mendistribusikan elemen secara merata, menempatkan elemen pertama di awal, terakhir di akhir, dan sisanya dengan jarak yang sama di antara mereka. Menurut Material Design Guidelines, 2025, SpaceBetween optimal untuk panel alat dan baris navigasi.

Parameter verticalAlignment menyelaraskan elemen secara vertikal. Alignment.Top, Alignment.CenterVertically dan Alignment.Bottom tersedia. Properti ini berguna ketika elemen Row memiliki tinggi berbeda — misalnya, ikon di samping teks multi-baris.

Tabel nilai Arrangement

NilaiDeskripsiPenggunaan
StartElemen menempel ke awal RowBaris rata kiri
CenterElemen di tengah kontainerMenu horizontal, judul
SpaceBetweenMerata dengan pertama di awal dan terakhir di akhirPanel alat, navigasi
SpaceEvenlyJarak sama antar elemen dan tepiBaris tombol, grid merata
SpaceAroundJarak sama antar elemen, setengah jarak di tepiKorsel, galeri ikon

Distribusi ruang dengan Modifier.weight

Modifier.weight — adalah pengubah yang hanya tersedia di dalam Row dan Column, yang mendistribusikan ruang yang tersedia antar elemen anak secara proporsional terhadap nilai yang ditentukan. Jika satu elemen memiliki bobot 1.0f dan lainnya 2.0f, elemen kedua akan menempati ruang dua kali lebih banyak.

Elemen tanpa weight menempati ruang yang diperlukan untuk kontennya. Ruang yang tersisa didistribusikan antar elemen dengan weight secara proporsional terhadap bobotnya. Perilaku ini analog dengan properti flex-grow di CSS Flexbox.

Menurut Android Developer Documentation, 2025, weight hanya berfungsi di dalam Row, Column dan BoxWithConstraints. Saat menggunakan weight di Row, semua elemen anak diukur dalam dua lintasan: pertama elemen tanpa weight, kemudian elemen dengan weight.

kotlin
@Composable
fun WeightExample() {
    Row(
        modifier = Modifier.fillMaxWidth(),
        horizontalArrangement = Arrangement.Start
    ) {
        Text(
            text = "Kiri",
            modifier = Modifier.weight(1.0f)
        )
        Text(text = "Kanan")
    }
}

Contoh kode dengan Row

Contoh pertama menunjukkan Row dengan ikon dan teks — skenario umum untuk daftar kontak atau pengaturan. Icon dan Text dibungkus dalam Row dengan verticalAlignment di tengah.

kotlin
@Composable
fun IconWithText() {
    Row(
        verticalAlignment = Alignment.CenterVertically,
        modifier = Modifier.padding(8.dp)
    ) {
        Icon(
            imageVector = Icons.Default.Favorite,
            contentDescription = "Favorite"
        )
        Spacer(modifier = Modifier.width(8.dp))
        Text(text = "Tambahkan ke favorit")
    }
}

Contoh kedua menunjukkan Row dengan tombol dan distribusi merata. SpaceEvenly menjamin jarak yang sama antara semua tombol dan tepi kontainer.

kotlin
@Composable
fun ButtonRow() {
    Row(
        modifier = Modifier.fillMaxWidth().padding(16.dp),
        horizontalArrangement = Arrangement.SpaceEvenly
    ) {
        Button(onClick = {}) { Text("Batal") }
        Button(onClick = {}) { Text("Simpan") }
    }
}

Contoh ketiga — Row di dalam Card untuk menampilkan peringkat. Row bersarang dengan Modifier.weight memungkinkan bintang peringkat dan nilai numerik menempati ruang tetap.

kotlin
@Composable
fun RatingRow(rating: Float) {
    Row(
        verticalAlignment = Alignment.CenterVertically
    ) {
        Text(
            text = "Peringkat:",
            modifier = Modifier.weight(1.0f)
        )
        Text(text = "$rating / 5.0")
    }
}

Fitur Row dalam tata letak adaptif

Row memerlukan kontrol lebar dalam tata letak adaptif. Jika konten Row melebihi lebar layar yang tersedia, elemen dapat keluar dari batas kontainer. Untuk mencegahnya, gunakan Modifier.horizontalScroll atau beralih ke Column.

Saat menggabungkan Row dengan Modifier.weight, penting untuk mengatur fillMaxWidth pada Row induk — jika tidak, weight akan mendistribusikan ruang yang tidak ada. Menurut Material Design Guidelines, 2025, Row dengan weight tanpa fillMaxWidth dianggap konfigurasi yang salah.

Untuk antarmuka adaptif, disarankan menggabungkan Row dengan Box atau menggunakan Arrangement.SpaceBetween untuk distribusi otomatis elemen pada berbagai ukuran layar. Ini memberikan fleksibilitas tanpa media queries.

  • Modifier.horizontalScroll — menambahkan gulir saat Row meluap
  • Modifier.weight — mendistribusikan ruang secara proporsional
  • Arrangement.SpaceBetween — distribusi adaptif dengan fiksasi di tepi

Pertanyaan yang Sering Diajukan

Apa perbedaan Row dengan Column di Jetpack Compose?

Row menempatkan elemen secara horizontal (dari kiri ke kanan), sedangkan Column — secara vertikal (dari atas ke bawah). Row menggantikan LinearLayout dengan orientasi horizontal dari pendekatan View lama, dan Column — LinearLayout vertikal.

Bagaimana cara membuat Row dengan gulir?

Tambahkan pengubah Modifier.horizontalScroll ke Row. Untuk daftar besar dengan pemuatan lambat, gunakan LazyRow — ia hanya merender elemen yang terlihat dan menggunakannya kembali saat menggulir.

Bisakah Row ditempatkan di dalam Row lain?

Ya, Row dapat ditempatkan di dalam Row, Column atau Box lain. Saat menyarangkan, perhatikan bahwa Row dalam menerima lebar dari kontainer induk, dan jika perlu, atur fillMaxWidth untuk setiap tingkat.

Apa yang dilakukan Modifier.weight di Row?

Modifier.weight mendistribusikan ruang yang tersisa di Row antar elemen anak secara proporsional terhadap bobot yang ditentukan. Elemen dengan bobot 2.0f akan dua kali lebih lebar dari elemen dengan bobot 1.0f. Weight hanya berfungsi di dalam Row dan Column.

Bagaimana cara meratakan tengah elemen Row secara vertikal?

Gunakan parameter verticalAlignment = Alignment.CenterVertically saat membuat Row. Ini akan menyelaraskan semua elemen anak di sepanjang sumbu vertikal terlepas dari tingginya.

Ringkasan

  • Row — kontainer horizontal Compose untuk menempatkan elemen dalam satu baris dari kiri ke kanan dengan tata letak dan perataan yang dapat dikonfigurasi.
  • horizontalArrangement mengatur distribusi horizontal elemen: Start, Center, End, SpaceBetween, SpaceEvenly dan SpaceAround.
  • verticalAlignment menyelaraskan elemen secara vertikal melalui Alignment.Top, CenterVertically atau Bottom.
  • Modifier.weight mendistribusikan ruang kosong antar elemen secara proporsional terhadap bobot, analog dengan flex-grow di CSS.
  • Row mendukung penyarangan, pengguliran melalui Modifier.horizontalScroll dan bekerja dengan kontainer Compose lainnya.
  • Dalam tata letak adaptif, penting untuk mengatur Modifier.fillMaxWidth untuk Row dengan weight, jika tidak elemen tidak akan mendistribusikan ruang dengan benar.
  • Untuk daftar horizontal dengan banyak elemen, gunakan LazyRow daripada Row untuk kinerja optimal.

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga