Row w Jetpack Compose: co to jest, właściwości composable i jak działa

Autor: IT Sectr Opublikowano: 2026-06-28 Czas czytania: 10 min

Row — to funkcja composable w Jetpack Compose służąca do umieszczania elementów potomnych w poziomym rzędzie. W przeciwieństwie do Column, Row układa elementy od lewej do prawej i umożliwia konfigurację rozmieszczenia za pomocą parametrów horizontalArrangement i verticalAlignment. Według Google Android Documentation, 2025, Row jest jednym z trzech podstawowych kontenerów Compose obok Column i Box i jest używany do tworzenia poziomych struktur interfejsu: wierszy przycisków, pól wprowadzania i ikon z tekstem.

Najważniejsze

  • Row — poziomy kontener Jetpack Compose, który umieszcza elementy potomne w jednej linii od lewej do prawej.
  • horizontalArrangement zarządza rozmieszczeniem elementów w poziomie: równomiernie, z odstępami lub na końcu kontenera.
  • verticalAlignment wyrównuje elementy w pionie względem kontenera: do górnej krawędzi, środka lub dolnej.
  • Modifier.weight pozwala rozdzielać dostępną przestrzeń między elementami Row proporcjonalnie do określonej wagi.
  • Row jest efektywny do tworzenia wierszy przycisków, list ikon, pól wprowadzania i poziomych paneli narzędzi w interfejsach mobilnych.

Czym jest Row w Jetpack Compose

Row — to funkcja composable, która umieszcza elementy potomne w sekwencji poziomej. W hierarchii układów Compose Row zajmuje miejsce podstawowego kontenera obok Column i Box.

Row nie wymaga określania rozmiarów — automatycznie dostosowuje się do zawartości. Szerokość Row jest równa sumie szerokości elementów potomnych z uwzględnieniem odstępów, jeśli nie ustawiono Modifier.fillMaxWidth lub stałego rozmiaru.

Elementy potomne Row mogą mieć własne modyfikatory, które wpływają na ich położenie wewnątrz kontenera. Na przykład Modifier.weight pozwala elementom zajmować proporcjonalną część dostępnej przestrzeni.

Według Android Developers Blog, 2024, Row przetwarza elementy potomne sekwencyjnie, obliczając ich rozmiary na podstawie reguł pomiaru Compose: najpierw mierzone są elementy bez weight, następnie pozostała przestrzeń jest dzielona między elementy z weight.

Składnia i podstawowa sygnatura Row

Podstawowa sygnatura Row zawiera parametr modifier, horizontalArrangement i verticalAlignment. Wszystkie elementy potomne są przekazywane w ostatnim bloku lambda content.

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

Właściwości Row: horizontalArrangement i verticalAlignment

Parametr horizontalArrangement określa, jak elementy potomne są rozmieszczane wzdłuż osi poziomej wewnątrz Row. Dostępne są wartości Start, End, Center, SpaceBetween, SpaceAround i SpaceEvenly z klasy Arrangement.

Arrangement.Start umieszcza elementy na początku kontenera, Arrangement.End — na końcu, a Arrangement.Center — na środku. Te wartości działają podobnie do właściwości justify-content w CSS Flexbox.

Arrangement.SpaceBetween rozmieszcza elementy równomiernie, umieszczając pierwszy element na początku, ostatni na końcu, a pozostałe z równymi odstępami między sobą. Według Material Design Guidelines, 2025, SpaceBetween jest optymalny dla paneli narzędzi i wierszy nawigacyjnych.

Parametr verticalAlignment wyrównuje elementy w pionie. Dostępne są Alignment.Top, Alignment.CenterVertically i Alignment.Bottom. Ta właściwość jest przydatna, gdy elementy Row mają różną wysokość — na przykład ikona obok wielowierszowego tekstu.

Tabela wartości Arrangement

WartośćOpisZastosowanie
StartElementy dociśnięte do początku RowWiersze z wyrównaniem do lewej
CenterElementy na środku konteneraMenu poziome, nagłówki
SpaceBetweenRównomiernie z pierwszym na początku i ostatnim na końcuPanele narzędzi, nawigacja
SpaceEvenlyRówne odstępy między elementami i na krawędziachWiersze przycisków, równomierne siatki
SpaceAroundRówne odstępy między elementami, połowa odstępu na krawędziachKaruzele, galerie ikon

Rozdzielanie przestrzeni za pomocą Modifier.weight

Modifier.weight — to modyfikator dostępny tylko wewnątrz Row i Column, który rozdziela dostępną przestrzeń między elementami potomnymi proporcjonalnie do określonej wartości. Jeśli element ma wagę 1.0f, a inny 2.0f, drugi element zajmie dwa razy więcej miejsca.

Elementy bez określenia weight zajmują tyle miejsca, ile potrzebują na swoją zawartość. Pozostała przestrzeń jest dzielona między elementy z weight proporcjonalnie do ich wagi. To zachowanie jest analogiczne do właściwości flex-grow w CSS Flexbox.

Według Android Developer Documentation, 2025, weight działa tylko wewnątrz Row, Column i BoxWithConstraints. Przy użyciu weight w Row wszystkie elementy potomne są mierzone w dwóch przebiegach: najpierw elementy bez weight, następnie elementy z weight.

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

Przykłady kodu z Row

Pierwszy przykład pokazuje Row z ikoną i tekstem — typowy scenariusz dla listy kontaktów lub ustawień. Icon i Text są owinięte w Row z verticalAlignment wyśrodkowanym.

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 = "Dodaj do ulubionych")
    }
}

Drugi przykład pokazuje Row z przyciskami i równomiernym rozmieszczeniem. SpaceEvenly gwarantuje równe odstępy między wszystkimi przyciskami i krawędziami kontenera.

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

Trzeci przykład — Row wewnątrz Card do wyświetlania oceny. Zagnieżdżony Row z Modifier.weight pozwala gwieździe oceny i wartości liczbowej zajmować stałą przestrzeń.

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

Cechy Row w układzie adaptacyjnym

Row wymaga kontroli szerokości w układzie adaptacyjnym. Jeśli zawartość Row przekracza dostępną szerokość ekranu, elementy mogą wychodzić poza granice kontenera. Aby temu zapobiec, używaj Modifier.horizontalScroll lub przejścia na Column.

Przy łączeniu Row z Modifier.weight ważne jest ustawienie fillMaxWidth dla nadrzędnego Row — w przeciwnym razie weight będzie rozdzielać nieistniejącą przestrzeń. Według Material Design Guidelines, 2025, Row z weight bez fillMaxWidth jest uważany za nieprawidłową konfigurację.

W interfejsach adaptacyjnych zaleca się łączenie Row z Box lub używanie Arrangement.SpaceBetween do automatycznego rozmieszczania elementów na różnych rozmiarach ekranu. Zapewnia to elastyczność bez zapytań medialnych.

  • Modifier.horizontalScroll — dodaje przewijanie przy przepełnieniu Row
  • Modifier.weight — rozdziela przestrzeń proporcjonalnie
  • Arrangement.SpaceBetween — adaptacyjne rozmieszczenie z mocowaniem na krawędziach

Często zadawane pytania

Czym Row różni się od Column w Jetpack Compose?

Row umieszcza elementy poziomo (od lewej do prawej), a Column — pionowo (od góry do dołu). Row zastępuje LinearLayout z orientacją poziomą ze starego podejścia View, a Column — pionowy LinearLayout.

Jak zrobić Row z przewijaniem?

Dodaj modyfikator Modifier.horizontalScroll do Row. Dla dużych list z leniwym ładowaniem używaj LazyRow — renderuje tylko widoczne elementy i ponownie je wykorzystuje podczas przewijania.

Czy można zagnieździć Row w innym Row?

Tak, Row można zagnieździć w innym Row, Column lub Box. Przy zagnieżdżaniu pamiętaj, że wewnętrzny Row otrzyma szerokość od kontenera nadrzędnego i w razie potrzeby ustaw fillMaxWidth dla każdego poziomu.

Co robi Modifier.weight w Row?

Modifier.weight rozdziela pozostałą przestrzeń w Row między elementy potomne proporcjonalnie do określonej wagi. Element z wagą 2.0f będzie dwa razy szerszy niż element z wagą 1.0f. Weight działa tylko wewnątrz Row i Column.

Jak wyśrodkować elementy Row w pionie?

Użyj parametru verticalAlignment = Alignment.CenterVertically podczas tworzenia Row. To wyrówna wszystkie elementy potomne wzdłuż osi pionowej niezależnie od ich wysokości.

Podsumowanie

  • Row — poziomy kontener Compose do umieszczania elementów w rzędzie od lewej do prawej z konfigurowalnym rozmieszczeniem i wyrównaniem.
  • horizontalArrangement zarządza rozmieszczeniem elementów w poziomie: Start, Center, End, SpaceBetween, SpaceEvenly i SpaceAround.
  • verticalAlignment wyrównuje elementy w pionie przez Alignment.Top, CenterVertically lub Bottom.
  • Modifier.weight rozdziela wolną przestrzeń między elementami proporcjonalnie do określonej wagi, analogicznie do flex-grow w CSS.
  • Row obsługuje zagnieżdżanie, przewijanie przez Modifier.horizontalScroll i współpracę z innymi kontenerami Compose.
  • W układzie adaptacyjnym ważne jest ustawienie Modifier.fillMaxWidth dla Row z weight, w przeciwnym razie elementy nie rozdzielą przestrzeni prawidłowo.
  • Dla poziomych list z dużą liczbą elementów używaj LazyRow zamiast Row dla optymalnej wydajności.

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również