Row in Jetpack Compose: cos'è, proprietà composable e come funziona

Autore: IT Sectr Pubblicato: 2026-06-28 Tempo di lettura: 10 min

Row è una funzione composable in Jetpack Compose per posizionare elementi figli in una riga orizzontale. A differenza di Column, Row dispone gli elementi da sinistra a destra e supporta la configurazione del layout tramite i parametri horizontalArrangement e verticalAlignment. Secondo Google Android Documentation, 2025, Row è uno dei tre contenitori di base di Compose insieme a Column e Box e viene utilizzato per creare strutture di interfaccia orizzontali: righe di pulsanti, campi di input e icone con testo.

Punti chiave

  • Row è un contenitore orizzontale di Jetpack Compose che posiziona gli elementi componibili figli in un'unica riga da sinistra a destra.
  • horizontalArrangement controlla la distribuzione degli elementi orizzontalmente: uniformemente, con spaziatura o alla fine del contenitore.
  • verticalAlignment allinea gli elementi verticalmente rispetto al contenitore: in alto, al centro o in basso.
  • Modifier.weight consente di distribuire lo spazio disponibile tra gli elementi di Row proporzionalmente al peso specificato.
  • Row è efficace per creare righe di pulsanti, elenchi di icone, campi di input e barre degli strumenti orizzontali nelle interfacce mobili.

Cos'è Row in Jetpack Compose

Row è una funzione composable che posiziona gli elementi figli in una sequenza orizzontale. Nella gerarchia dei layout di Compose, Row occupa la posizione di un contenitore di base insieme a Column e Box.

Row non richiede la specifica delle dimensioni — si adatta automaticamente al suo contenuto. La larghezza di Row è uguale alla somma delle larghezze degli elementi figli inclusa la spaziatura, a meno che non venga specificato Modifier.fillMaxWidth o una dimensione fissa.

Gli elementi figli di Row possono avere i propri modificatori che influenzano la loro posizione all'interno del contenitore. Ad esempio, Modifier.weight consente agli elementi di occupare una parte proporzionale dello spazio disponibile.

Secondo Android Developers Blog, 2024, Row elabora gli elementi figli in sequenza, calcolando le loro dimensioni in base alle regole di misurazione di Compose: prima vengono misurati gli elementi senza weight, poi lo spazio rimanente viene distribuito tra gli elementi con weight.

Sintassi e firma di base di Row

La firma di base di Row include il parametro modifier, horizontalArrangement e verticalAlignment. Tutti gli elementi figli vengono passati nel blocco lambda del contenuto finale.

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

Proprietà di Row: horizontalArrangement e verticalAlignment

Il parametro horizontalArrangement determina come gli elementi figli vengono distribuiti lungo l'asse orizzontale all'interno di Row. I valori disponibili includono Start, End, Center, SpaceBetween, SpaceAround e SpaceEvenly della classe Arrangement.

Arrangement.Start posiziona gli elementi all'inizio del contenitore, Arrangement.End — alla fine, e Arrangement.Center — al centro. Questi valori funzionano in modo simile alla proprietà justify-content in CSS Flexbox.

Arrangement.SpaceBetween distribuisce gli elementi uniformemente, posizionando il primo elemento all'inizio, l'ultimo alla fine e gli altri con spaziatura uguale tra loro. Secondo Material Design Guidelines, 2025, SpaceBetween è ottimale per barre degli strumenti e righe di navigazione.

Il parametro verticalAlignment allinea gli elementi verticalmente. I valori disponibili includono Alignment.Top, Alignment.CenterVertically e Alignment.Bottom. Questa proprietà è utile quando gli elementi di Row hanno altezze diverse — ad esempio, un'icona accanto a testo su più righe.

Tabella dei valori di Arrangement

ValoreDescrizioneUtilizzo
StartGli elementi sono spinti all'inizio di RowRighe allineate a sinistra
CenterGli elementi sono centrati nel contenitoreMenu orizzontali, intestazioni
SpaceBetweenUniformemente con primo all'inizio e ultimo alla fineBarre degli strumenti, navigazione
SpaceEvenlySpaziatura uguale tra elementi e ai bordiRighe di pulsanti, griglie uniformi
SpaceAroundSpaziatura uguale tra elementi, mezza spaziatura ai bordiCaroselli, gallerie di icone

Distribuzione dello spazio con Modifier.weight

Modifier.weight è un modificatore disponibile solo all'interno di Row e Column che distribuisce lo spazio disponibile tra gli elementi figli proporzionalmente al valore specificato. Se un elemento ha un peso di 1.0f e un altro di 2.0f, il secondo elemento occuperà il doppio dello spazio.

Gli elementi senza weight occupano lo spazio necessario per il loro contenuto. Lo spazio rimanente viene distribuito tra gli elementi con weight proporzionalmente al loro peso. Questo comportamento è simile alla proprietà flex-grow in CSS Flexbox.

Secondo Android Developer Documentation, 2025, weight funziona solo all'interno di Row, Column e BoxWithConstraints. Quando si utilizza weight in Row, tutti gli elementi figli vengono misurati in due passaggi: prima gli elementi senza weight, poi gli elementi con weight.

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

Esempi di codice con Row

Il primo esempio mostra Row con un'icona e testo — uno scenario tipico per un elenco di contatti o impostazioni. Icon e Text sono racchiusi in Row con verticalAlignment centrato.

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 = "Aggiungi ai preferiti")
    }
}

Il secondo esempio mostra Row con pulsanti e distribuzione uniforme. SpaceEvenly garantisce una spaziatura uguale tra tutti i pulsanti e i bordi del contenitore.

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

Il terzo esempio — Row all'interno di una Card per visualizzare una valutazione. Una Row annidata con Modifier.weight consente alla stella di valutazione e al valore numerico di occupare spazio fisso.

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

Caratteristiche di Row nel layout adattivo

Row richiede il controllo della larghezza nel layout adattivo. Se il contenuto di Row supera la larghezza dello schermo disponibile, gli elementi potrebbero fuoriuscire dai limiti del contenitore. Per evitare ciò, utilizzare Modifier.horizontalScroll o passare a Column.

Quando si combina Row con Modifier.weight, è importante impostare fillMaxWidth sul Row padre — altrimenti weight distribuirà spazio inesistente. Secondo Material Design Guidelines, 2025, Row con weight senza fillMaxWidth è considerata una configurazione non valida.

Per interfacce adattive, si consiglia di combinare Row con Box o utilizzare Arrangement.SpaceBetween per la distribuzione automatica degli elementi su diverse dimensioni dello schermo. Ciò offre flessibilità senza query multimediali.

  • Modifier.horizontalScroll — aggiunge scorrimento quando Row trabocca
  • Modifier.weight — distribuisce lo spazio proporzionalmente
  • Arrangement.SpaceBetween — distribuzione adattiva con fissaggio ai bordi

Domande frequenti

In cosa Row si differenzia da Column in Jetpack Compose?

Row posiziona gli elementi orizzontalmente (da sinistra a destra), mentre Column li posiziona verticalmente (dall'alto in basso). Row sostituisce LinearLayout con orientamento orizzontale del vecchio approccio View, e Column sostituisce LinearLayout verticale.

Come creare una Row scorrevole?

Aggiungi il modificatore Modifier.horizontalScroll a Row. Per elenchi di grandi dimensioni con caricamento lento, utilizza LazyRow — renderizza solo gli elementi visibili e li ricicla durante lo scorrimento.

Si può annidare Row dentro un'altra Row?

Sì, Row può essere annidata dentro un'altra Row, Column o Box. Durante l'annidamento, tieni presente che la Row interna riceverà la sua larghezza dal contenitore padre e, se necessario, imposta fillMaxWidth per ogni livello.

Cosa fa Modifier.weight in Row?

Modifier.weight distribuisce lo spazio rimanente in Row tra gli elementi figli proporzionalmente al peso specificato. Un elemento con peso 2.0f sarà largo il doppio di un elemento con peso 1.0f. Weight funziona solo all'interno di Row e Column.

Come centrare verticalmente gli elementi di Row?

Utilizza il parametro verticalAlignment = Alignment.CenterVertically quando crei Row. Questo allineerà tutti gli elementi figli lungo l'asse verticale indipendentemente dalla loro altezza.

Riepilogo

  • Row è un contenitore orizzontale di Compose per posizionare elementi in una riga da sinistra a destra con disposizione e allineamento personalizzabili.
  • horizontalArrangement controlla la distribuzione orizzontale degli elementi: Start, Center, End, SpaceBetween, SpaceEvenly e SpaceAround.
  • verticalAlignment allinea gli elementi verticalmente tramite Alignment.Top, CenterVertically o Bottom.
  • Modifier.weight distribuisce lo spazio libero tra gli elementi proporzionalmente al peso specificato, simile a flex-grow in CSS.
  • Row supporta annidamento, scorrimento tramite Modifier.horizontalScroll e funziona con altri contenitori Compose.
  • Nel layout adattivo, è importante impostare Modifier.fillMaxWidth per Row con weight, altrimenti gli elementi non distribuiranno lo spazio correttamente.
  • Per elenchi orizzontali con molti elementi, utilizza LazyRow invece di Row per prestazioni ottimali.

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche