Row у Jetpack Compose: шта је то, својства composable-а и како ради

Аутор: IT Sectr Објављено: 2026-06-28 Време читања: 10 мин

Row — је composable функција у Jetpack Compose за постављање елемената у хоризонтални ред. За разлику од Column, Row распоређује елементе слева надесно и подржава подешавање распореда преко параметара horizontalArrangement и verticalAlignment. Према Google Android Documentation, 2025, Row је један од три основна контејнера Compose-а поред Column и Box и користи се за креирање хоризонталних структура интерфејса: редова дугмади, поља за унос и икона са текстом.

Главне ствари

  • Row — хоризонтални контејнер Jetpack Compose-а који поставља елементе у једну линију слева надесно.
  • horizontalArrangement управља расподелом елемената хоризонтално: равномерно, са размацима или на крају контејнера.
  • verticalAlignment поравнава елементе вертикално у односу на контејнер: горња ивица, центар или доња.
  • Modifier.weight омогућава расподелу доступног простора између елемената Row-а пропорционално наведеној тежини.
  • Row је ефикасан за креирање редова дугмади, листи икона, поља за унос и хоризонталних панела алата у мобилним интерфејсима.

Шта је Row у Jetpack Compose-у

Row — је composable функција која поставља елементе у хоризонтални низ. У хијерархији изгледа Compose-а, Row заузима место основног контејнера поред Column и Box.

Row не захтева навођење димензија — аутоматски се прилагођава садржају. Ширина Row-а је једнака збиру ширина елемената укључујући размаке, ако није постављен Modifier.fillMaxWidth или фиксна величина.

Елементи Row-а могу имати сопствене модификаторе који утичу на њихов положај унутар контејнера. На пример, Modifier.weight омогућава елементима да заузму пропорционални део доступног простора.

Према Android Developers Blog, 2024, Row обрађује елементе секвенцијално, израчунавајући њихове величине на основу правила мерења Compose-а: прво се мере елементи без weight, затим се преостали простор расподељује између елемената са weight.

Синтакса и основни потпис Row-а

Основни потпис Row-а укључује параметре modifier, horizontalArrangement и verticalAlignment. Сви елементи се прослеђују у последњем ламбда блоку content.

kotlin
@Composable
fun RowExample() {
    Row(
        modifier = Modifier.fillMaxWidth().padding(16.dp),
        horizontalArrangement = Arrangement.SpaceEvenly,
        verticalAlignment = Alignment.CenterVertically
    ) {
        Text(text = "Један")
        Text(text = "Два")
        Text(text = "Три")
    }
}

Својства Row-а: horizontalArrangement и verticalAlignment

Параметар horizontalArrangement одређује како се елементи распоређују дуж хоризонталне осе унутар Row-а. Доступне су вредности Start, End, Center, SpaceBetween, SpaceAround и SpaceEvenly из класе Arrangement.

Arrangement.Start поставља елементе на почетак контејнера, Arrangement.End — на крај, а Arrangement.Center — у центар. Ове вредности раде слично својству justify-content у CSS Flexbox-у.

Arrangement.SpaceBetween распоређује елементе равномерно, постављајући први на почетак, последњи на крај, а остале са једнаким размацима између. Према Material Design Guidelines, 2025, SpaceBetween је оптималан за панеле алата и навигационе редове.

Параметар verticalAlignment поравнава елементе вертикално. Доступни су Alignment.Top, Alignment.CenterVertically и Alignment.Bottom. Ово својство је корисно када елементи Row-а имају различите висине — на пример, икона поред вишередног текста.

Табела вредности Arrangement

ВредностОписПримена
StartЕлементи привучени ка почетку Row-аРедови са поравнањем улево
CenterЕлементи у центру контејнераХоризонтални менији, наслови
SpaceBetweenРавномерно са првим на почетку и последњим на крајуПанели алата, навигација
SpaceEvenlyЈеднаки размаци између елемената и на ивицамаРедови дугмади, равномерне мреже
SpaceAroundЈеднаки размаци између елемената, пола размака на ивицамаКарусели, галерије икона

Расподела простора са Modifier.weight

Modifier.weight — је модификатор доступан само унутар Row и Column, који расподељује доступни простор између елемената пропорционално наведеној вредности. Ако један елемент има тежину 1.0f, а други 2.0f, други елемент ће заузети двоструко више простора.

Елементи без weight заузимају онолико простора колико им треба за садржај. Преостали простор се расподељује између елемената са weight пропорционално њиховој тежини. Ово понашање је аналогно својству flex-grow у CSS Flexbox-у.

Према Android Developer Documentation, 2025, weight ради само унутар Row, Column и BoxWithConstraints. При коришћењу weight у Row-у, сви елементи се мере у два пролаза: прво елементи без weight, затим елементи са weight.

kotlin
@Composable
fun WeightExample() {
    Row(
        modifier = Modifier.fillMaxWidth(),
        horizontalArrangement = Arrangement.Start
    ) {
        Text(
            text = "Лево",
            modifier = Modifier.weight(1.0f)
        )
        Text(text = "Десно")
    }
}

Примери кода са Row-ом

Први пример приказује Row са иконом и текстом — типичан сценарио за листу контаката или подешавања. Icon и Text су умотани у Row са центрираним 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 = "Додај у омиљене")
    }
}

Други пример приказује Row са дугмадима и равномерном расподелом. SpaceEvenly гарантује једнаке размаке између свих дугмади и ивица контејнера.

kotlin
@Composable
fun ButtonRow() {
    Row(
        modifier = Modifier.fillMaxWidth().padding(16.dp),
        horizontalArrangement = Arrangement.SpaceEvenly
    ) {
        Button(onClick = {}) { Text("Откажи") }
        Button(onClick = {}) { Text("Сачувај") }
    }
}

Трећи пример — Row унутар Card-а за приказ рејтинга. Угнежђени Row са Modifier.weight омогућава звездици рејтинга и нумеричкој вредности да заузму фиксни простор.

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

Особине Row-а у адаптивном распореду

Row захтева контролу ширине у адаптивном распореду. Ако садржај Row-а премашује доступну ширину екрана, елементи могу изаћи из граница контејнера. Да бисте то спречили, користите Modifier.horizontalScroll или прелазак на Column.

При комбиновању Row-а са Modifier.weight важно је поставити fillMaxWidth за родитељски Row — иначе ће weight расподељивати непостојећи простор. Према Material Design Guidelines, 2025, Row са weight без fillMaxWidth се сматра неисправном конфигурацијом.

За адаптивне интерфејсе препоручује се комбиновање Row-а са Box-ом или коришћење Arrangement.SpaceBetween за аутоматску расподелу елемената на различитим величинама екрана. Ово обезбеђује флексибилност без медија упита.

  • Modifier.horizontalScroll — додаје скроловање при прекорачењу Row-а
  • Modifier.weight — расподељује простор пропорционално
  • Arrangement.SpaceBetween — адаптивна расподела са фиксацијом на ивицама

Често постављана питања

По чему се Row разликује од Column у Jetpack Compose-у?

Row распоређује елементе хоризонтално (слева надесно), а Column — вертикално (одозго надоле). Row замењује LinearLayout са хоризонталном оријентацијом из старог View приступа, а Column — вертикални LinearLayout.

Како направити Row са скроловањем?

Додајте модификатор Modifier.horizontalScroll на Row. За велике листе са лењим учитавањем користите LazyRow — он приказује само видљиве елементе и поново их користи при скроловању.

Може ли се Row угнездити у други Row?

Да, Row се може угнездити у други Row, Column или Box. При уметању имајте на уму да унутрашњи Row добија ширину од родитељског контејнера и по потреби поставите fillMaxWidth за сваки ниво.

Шта ради Modifier.weight у Row-у?

Modifier.weight расподељује преостали простор у Row-у између елемената пропорционално наведеној тежини. Елемент са тежином 2.0f биће двоструко шири од елемента са тежином 1.0f. Weight ради само унутар Row и Column.

Како поравнати елементе Row-а вертикално по центру?

Користите параметар verticalAlignment = Alignment.CenterVertically при креирању Row-а. Ово ће поравнати све елементе дуж вертикалне осе без обзира на њихову висину.

Резиме

  • Row — хоризонтални контејнер Compose-а за постављање елемената у ред слева надесно са подесивим распоредом и поравнањем.
  • horizontalArrangement управља хоризонталном расподелом елемената: Start, Center, End, SpaceBetween, SpaceEvenly и SpaceAround.
  • verticalAlignment поравнава елементе вертикално преко Alignment.Top, CenterVertically или Bottom.
  • Modifier.weight расподељује слободни простор између елемената пропорционално тежини, аналогно flex-grow у CSS-у.
  • Row подржава угнежђавање, скроловање преко Modifier.horizontalScroll и рад са другим Compose контејнерима.
  • У адаптивном распореду је важно поставити Modifier.fillMaxWidth за Row са weight, иначе елементи неће правилно расподелити простор.
  • За хоризонталне листе са много елемената користите LazyRow уместо Row-а за оптималне перформансе.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође