Row v Jetpack Compose: co to je, vlastnosti composable a jak funguje

Autor: IT Sectr Publikováno: 2026-06-28 Doba čtení: 10 min

Row — je composable funkce v Jetpack Compose pro umístění podřízených prvků do horizontálního řádku. Na rozdíl od Column řadí Row prvky zleva doprava a podporuje konfiguraci rozvržení pomocí parametrů horizontalArrangement a verticalAlignment. Podle Google Android Documentation, 2025 je Row jedním ze tří základních kontejnerů Compose vedle Column a Box a používá se k vytváření horizontálních struktur rozhraní: řad tlačítek, vstupních polí a ikon s textem.

Hlavní body

  • Row — horizontální kontejner Jetpack Compose, který umísťuje podřízené prvky do jedné řady zleva doprava.
  • horizontalArrangement řídí rozložení prvků horizontálně: rovnoměrně, s mezerami nebo na konci kontejneru.
  • verticalAlignment zarovnává prvky vertikálně vůči kontejneru: horní okraj, střed nebo dolní okraj.
  • Modifier.weight umožňuje rozdělení dostupného prostoru mezi prvky Row poměrně podle zadané váhy.
  • Row je efektivní pro vytváření řad tlačítek, seznamů ikon, vstupních polí a horizontálních panelů nástrojů v mobilních rozhraních.

Co je Row v Jetpack Compose

Row — je composable funkce, která umísťuje podřízené prvky do horizontální sekvence. V hierarchii rozvržení Compose zaujímá Row místo základního kontejneru vedle Column a Box.

Row nevyžaduje zadání rozměrů — automaticky se přizpůsobuje obsahu. Šířka Row se rovná součtu šířek podřízených prvků včetně mezer, pokud není nastaven Modifier.fillMaxWidth nebo pevná velikost.

Podřízené prvky Row mohou mít vlastní modifikátory, které ovlivňují jejich pozici uvnitř kontejneru. Například Modifier.weight umožňuje prvkům zabírat poměrnou část dostupného prostoru.

Podle Android Developers Blog, 2024 zpracovává Row podřízené prvky sekvenčně, vypočítávaje jejich velikosti na základě pravidel měření Compose: nejprve se měří prvky bez weight, poté se zbývající prostor rozdělí mezi prvky s weight.

Syntaxe a základní signatura Row

Základní signatura Row zahrnuje parametr modifier, horizontalArrangement a verticalAlignment. Všechny podřízené prvky jsou předány v posledním lambda bloku content.

kotlin
@Composable
fun RowExample() {
    Row(
        modifier = Modifier.fillMaxWidth().padding(16.dp),
        horizontalArrangement = Arrangement.SpaceEvenly,
        verticalAlignment = Alignment.CenterVertically
    ) {
        Text(text = "Jedna")
        Text(text = "Dva")
        Text(text = "Tři")
    }
}

Vlastnosti Row: horizontalArrangement a verticalAlignment

Parametr horizontalArrangement určuje, jak jsou podřízené prvky rozmístěny podél horizontální osy uvnitř Row. K dispozici jsou hodnoty Start, End, Center, SpaceBetween, SpaceAround a SpaceEvenly z třídy Arrangement.

Arrangement.Start umísťuje prvky na začátek kontejneru, Arrangement.End — na konec a Arrangement.Center — do středu. Tyto hodnoty fungují podobně jako vlastnost justify-content v CSS Flexbox.

Arrangement.SpaceBetween rozmísťuje prvky rovnoměrně, umísťuje první prvek na začátek, poslední na konec a ostatní se stejnými mezerami mezi nimi. Podle Material Design Guidelines, 2025 je SpaceBetween optimální pro panely nástrojů a navigační řady.

Parametr verticalAlignment zarovnává prvky vertikálně. K dispozici jsou Alignment.Top, Alignment.CenterVertically a Alignment.Bottom. Tato vlastnost je užitečná, když mají prvky Row různou výšku — například ikona vedle víceřádkového textu.

Tabulka hodnot Arrangement

HodnotaPopisPoužití
StartPrvky přitisknuté k začátku RowŘady zarovnané vlevo
CenterPrvky ve středu kontejneruHorizontální menu, nadpisy
SpaceBetweenRovnoměrně s prvním na začátku a posledním na konciPanely nástrojů, navigace
SpaceEvenlyStejné mezery mezi prvky a okrajiŘady tlačítek, rovnoměrné mřížky
SpaceAroundStejné mezery mezi prvky, poloviční mezera na okrajíchKarusely, galerie ikon

Rozdělení prostoru pomocí Modifier.weight

Modifier.weight — je modifikátor dostupný pouze uvnitř Row a Column, který rozděluje dostupný prostor mezi podřízené prvky poměrně podle zadané hodnoty. Pokud má jeden prvek váhu 1.0f a druhý 2.0f, druhý prvek zabere dvakrát více místa.

Prvky bez weight zabírají tolik místa, kolik potřebují pro svůj obsah. Zbývající prostor je rozdělen mezi prvky s weight poměrně k jejich váze. Toto chování je analogické vlastnosti flex-grow v CSS Flexbox.

Podle Android Developer Documentation, 2025 funguje weight pouze uvnitř Row, Column a BoxWithConstraints. Při použití weight v Row jsou všechny podřízené prvky měřeny ve dvou průchodech: nejprve prvky bez weight, poté prvky s weight.

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

Příklady kódu s Row

První příklad ukazuje Row s ikonou a textem — typický scénář pro seznam kontaktů nebo nastavení. Icon a Text jsou zabaleny do Row s centrovacím verticalAlignment.

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 = "Přidat k oblíbeným")
    }
}

Druhý příklad ukazuje Row s tlačítky a rovnoměrným rozložením. SpaceEvenly zaručuje stejné mezery mezi všemi tlačítky a okraji kontejneru.

kotlin
@Composable
fun ButtonRow() {
    Row(
        modifier = Modifier.fillMaxWidth().padding(16.dp),
        horizontalArrangement = Arrangement.SpaceEvenly
    ) {
        Button(onClick = {}) { Text("Zrušit") }
        Button(onClick = {}) { Text("Uložit") }
    }
}

Třetí příklad — Row uvnitř Card pro zobrazení hodnocení. Vnořený Row s Modifier.weight umožňuje hvězdě hodnocení a číselné hodnotě zabírat pevný prostor.

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

Vlastnosti Row v adaptivním rozvržení

Row vyžaduje kontrolu šířky v adaptivním rozvržení. Pokud obsah Row překročí dostupnou šířku obrazovky, prvky mohou vybočit z hranic kontejneru. K zabránění tomu použijte Modifier.horizontalScroll nebo přechod na Column.

Při kombinování Row s Modifier.weight je důležité nastavit fillMaxWidth pro rodičovský Row — jinak bude weight rozdělovat neexistující prostor. Podle Material Design Guidelines, 2025 je Row s weight bez fillMaxWidth považován za nesprávnou konfiguraci.

Pro adaptivní rozhraní se doporučuje kombinovat Row s Box nebo použít Arrangement.SpaceBetween pro automatické rozložení prvků na různých velikostech obrazovky. To poskytuje flexibilitu bez media queries.

  • Modifier.horizontalScroll — přidává posouvání při přetečení Row
  • Modifier.weight — rozděluje prostor poměrně
  • Arrangement.SpaceBetween — adaptivní rozložení s fixací na okrajích

Často kladené otázky

Čím se Row liší od Column v Jetpack Compose?

Row umísťuje prvky horizontálně (zleva doprava), zatímco Column — vertikálně (shora dolů). Row nahrazuje LinearLayout s horizontální orientací ze starého View přístupu a Column — vertikální LinearLayout.

Jak vytvořit Row s posouváním?

Přidejte modifikátor Modifier.horizontalScroll k Row. Pro velké seznamy s líným načítáním použijte LazyRow — vykresluje pouze viditelné prvky a znovu je využívá při posouvání.

Lze vnořit Row do jiného Row?

Ano, Row lze vnořit do jiného Row, Column nebo Box. Při vnořování mějte na paměti, že vnitřní Row získá šířku od rodičovského kontejneru, a v případě potřeby nastavte fillMaxWidth pro každou úroveň.

Co dělá Modifier.weight v Row?

Modifier.weight rozděluje zbývající prostor v Row mezi podřízené prvky poměrně podle zadané váhy. Prvek s váhou 2.0f bude dvakrát širší než prvek s váhou 1.0f. Weight funguje pouze uvnitř Row a Column.

Jak zarovnat prvky Row vertikálně na střed?

Použijte parametr verticalAlignment = Alignment.CenterVertically při vytváření Row. To zarovná všechny podřízené prvky podél vertikální osy bez ohledu na jejich výšku.

Shrnutí

  • Row — horizontální kontejner Compose pro umístění prvků do řady zleva doprava s konfigurovatelným rozvržením a zarovnáním.
  • horizontalArrangement řídí horizontální rozložení prvků: Start, Center, End, SpaceBetween, SpaceEvenly a SpaceAround.
  • verticalAlignment zarovnává prvky vertikálně pomocí Alignment.Top, CenterVertically nebo Bottom.
  • Modifier.weight rozděluje volný prostor mezi prvky poměrně podle zadané váhy, analogicky k flex-grow v CSS.
  • Row podporuje vnořování, posouvání pomocí Modifier.horizontalScroll a spolupráci s dalšími kontejnery Compose.
  • V adaptivním rozvržení je důležité nastavit Modifier.fillMaxWidth pro Row s weight, jinak prvky nerozdělí prostor správně.
  • Pro horizontální seznamy s mnoha prvky použijte LazyRow místo Row pro optimální výkon.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také