Row i Jetpack Compose: vad det är, composable-egenskaper och hur det fungerar

Författare: IT Sectr Publicerad: 2026-06-28 Lästid: 10 min

Row — är en composable-funktion i Jetpack Compose för att placera underordnade element i en horisontell rad. Till skillnad från Column arrangerar Row element från vänster till höger och stöder konfiguration av layout genom parametrarna horizontalArrangement och verticalAlignment. Enligt Google Android Documentation, 2025 är Row en av tre grundläggande Compose-behållare tillsammans med Column och Box och används för att skapa horisontella gränssnittsstrukturer: knapprader, inmatningsfält och ikoner med text.

Huvudpunkter

  • Row — horisontell Jetpack Compose-behållare som placerar underordnade element i en rad från vänster till höger.
  • horizontalArrangement hanterar fördelningen av element horisontellt: jämnt, med mellanrum eller i slutet av behållaren.
  • verticalAlignment justerar element vertikalt i förhållande till behållaren: övre kant, mitten eller nedre kant.
  • Modifier.weight gör det möjligt att fördela tillgängligt utrymme mellan Row-element proportionellt mot angiven vikt.
  • Row är effektivt för att skapa knapprader, ikonlistor, inmatningsfält och horisontella verktygsfält i mobila gränssnitt.

Vad är Row i Jetpack Compose

Row — är en composable-funktion som placerar underordnade element i en horisontell sekvens. I Compose-layouthierarkin intar Row positionen som grundläggande behållare tillsammans med Column och Box.

Row kräver inte specifikation av dimensioner — den anpassar sig automatiskt till innehållet. Bredden på Row är lika med summan av bredderna på de underordnade elementen med hänsyn till mellanrum, om inte Modifier.fillMaxWidth eller en fast storlek har angetts.

Underordnade element i Row kan ha egna modifierare som påverkar deras position i behållaren. Till exempel gör Modifier.weight det möjligt för element att ta upp en proportionell del av tillgängligt utrymme.

Enligt Android Developers Blog, 2024 bearbetar Row underordnade element sekventiellt och beräknar deras storlekar baserat på Compose mätregler: först mäts element utan weight, sedan fördelas det återstående utrymmet mellan element med weight.

Syntax och grundsignatur för Row

Grundsignaturen för Row inkluderar parametern modifier, horizontalArrangement och verticalAlignment. Alla underordnade element skickas i det sista lambda-blocket content.

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

Egenskaper för Row: horizontalArrangement och verticalAlignment

Parametern horizontalArrangement bestämmer hur underordnade element fördelas längs den horisontella axeln inuti Row. Värdena Start, End, Center, SpaceBetween, SpaceAround och SpaceEvenly från klassen Arrangement är tillgängliga.

Arrangement.Start placerar element i början av behållaren, Arrangement.End — i slutet och Arrangement.Center — i mitten. Dessa värden fungerar på samma sätt som egenskapen justify-content i CSS Flexbox.

Arrangement.SpaceBetween fördelar element jämnt, placerar det första i början, det sista i slutet och resten med lika mellanrum mellan dem. Enligt Material Design Guidelines, 2025 är SpaceBetween optimalt för verktygsfält och navigeringsrader.

Parametern verticalAlignment justerar element vertikalt. Alignment.Top, Alignment.CenterVertically och Alignment.Bottom är tillgängliga. Denna egenskap är användbar när Row-element har olika höjd — till exempel en ikon bredvid flerradig text.

Tabell över Arrangement-värden

VärdeBeskrivningAnvändning
StartElement tryckta mot början av RowRader med vänsterjustering
CenterElement i mitten av behållarenHorisontella menyer, rubriker
SpaceBetweenJämnt med första i början och sista i slutetVerktygsfält, navigering
SpaceEvenlyLika mellanrum mellan element och kanterKnapprader, jämna rutnät
SpaceAroundLika mellanrum mellan element, halvt mellanrum vid kanterKaruseller, ikongallerier

Fördela utrymme med Modifier.weight

Modifier.weight — är en modifierare som endast är tillgänglig inuti Row och Column, som fördelar tillgängligt utrymme mellan underordnade element proportionellt mot det angivna värdet. Om ett element har vikten 1.0f och ett annat 2.0f kommer det andra elementet att ta upp dubbelt så mycket utrymme.

Element utan weight tar upp den plats som behövs för deras innehåll. Det återstående utrymmet fördelas mellan element med weight proportionellt mot deras vikt. Detta beteende är analogt med egenskapen flex-grow i CSS Flexbox.

Enligt Android Developer Documentation, 2025 fungerar weight endast inuti Row, Column och BoxWithConstraints. Vid användning av weight i Row mäts alla underordnade element i två omgångar: först element utan weight, sedan element med weight.

kotlin
@Composable
fun WeightExample() {
    Row(
        modifier = Modifier.fillMaxWidth(),
        horizontalArrangement = Arrangement.Start
    ) {
        Text(
            text = "Vänster",
            modifier = Modifier.weight(1.0f)
        )
        Text(text = "Höger")
    }
}

Kodexempel med Row

Det första exemplet visar Row med en ikon och text — ett typiskt scenario för en kontaktlista eller inställningar. Icon och Text är inslagna i Row med centrerad 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 = "Lägg till i favoriter")
    }
}

Det andra exemplet visar Row med knappar och jämn fördelning. SpaceEvenly garanterar lika mellanrum mellan alla knappar och behållarens kanter.

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

Det tredje exemplet — Row inuti Card för att visa betyg. Den nästlade Row med Modifier.weight gör att betygsstjärnan och det numeriska värdet kan ta upp fast utrymme.

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

Funktioner för Row i adaptiv layout

Row kräver breddkontroll i adaptiv layout. Om innehållet i Row överskrider tillgänglig skärmbredd kan element hamna utanför behållarens gränser. För att förhindra detta, använd Modifier.horizontalScroll eller växla till Column.

Vid kombination av Row med Modifier.weight är det viktigt att ställa in fillMaxWidth för den överordnade Row — annars kommer weight att fördela utrymme som inte finns. Enligt Material Design Guidelines, 2025 betraktas Row med weight utan fillMaxWidth som en felaktig konfiguration.

För adaptiva gränssnitt rekommenderas att kombinera Row med Box eller använda Arrangement.SpaceBetween för automatisk fördelning av element på olika skärmstorlekar. Detta ger flexibilitet utan mediaförfrågningar.

  • Modifier.horizontalScroll — lägger till rullning vid överflöd av Row
  • Modifier.weight — fördelar utrymme proportionellt
  • Arrangement.SpaceBetween — adaptiv fördelning med fixering vid kanter

Vanliga frågor

Vad är skillnaden mellan Row och Column i Jetpack Compose?

Row placerar element horisontellt (från vänster till höger), medan Column placerar dem vertikalt (uppifrån och ned). Row ersätter LinearLayout med horisontell orientering från det gamla View-sättet, och Column ersätter vertikal LinearLayout.

Hur skapar man en Row med rullning?

Lägg till modifieraren Modifier.horizontalScroll till Row. För stora listor med lat laddning, använd LazyRow — den renderar endast synliga element och återanvänder dem vid rullning.

Kan Row nästlas inuti en annan Row?

Ja, Row kan nästlas inuti en annan Row, Column eller Box. Vid nästling, tänk på att den inre Row får sin bredd från den överordnade behållaren och ställ vid behov in fillMaxWidth för varje nivå.

Vad gör Modifier.weight i Row?

Modifier.weight fördelar det återstående utrymmet i Row mellan underordnade element proportionellt mot den angivna vikten. Ett element med vikt 2.0f blir dubbelt så brett som ett element med vikt 1.0f. Weight fungerar endast inuti Row och Column.

Hur centrerar man Row-element vertikalt?

Använd parametern verticalAlignment = Alignment.CenterVertically när du skapar Row. Detta justerar alla underordnade element längs den vertikala axeln oavsett deras höjd.

Sammanfattning

  • Row — horisontell Compose-behållare för att placera element i en rad från vänster till höger med konfigurerbar layout och justering.
  • horizontalArrangement hanterar horisontell fördelning av element: Start, Center, End, SpaceBetween, SpaceEvenly och SpaceAround.
  • verticalAlignment justerar element vertikalt genom Alignment.Top, CenterVertically eller Bottom.
  • Modifier.weight fördelar ledigt utrymme mellan element proportionellt mot angiven vikt, analogt med flex-grow i CSS.
  • Row stöder nästling, rullning genom Modifier.horizontalScroll och samarbete med andra Compose-behållare.
  • I adaptiv layout är det viktigt att ställa in Modifier.fillMaxWidth för Row med weight, annars kommer element inte att fördela utrymmet korrekt.
  • För horisontella listor med många element, använd LazyRow istället för Row för optimal prestanda.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också