Jetpack Compose fornisce diversi container di layout per aiutarti a strutturare e disporre i componenti della UI. Sebbene i componibili di layout fondamentali come Row e Column gestiscano disposizioni semplici, molte app richiedono soluzioni di container più adattive e reattive man mano che le dimensioni dello schermo cambiano e i dati utente aumentano.
I contenitori di layout includono:
- Elenchi e griglie lazy: componenti come
LazyColumn,LazyRoweLazyVerticalGridche mostrano in modo efficiente set di dati di grandi dimensioni o con dimensioni dinamiche componendo e disponendo solo gli elementi attualmente visibili nell'area visibile. - Pager: container come
HorizontalPagereVerticalPagerche consentono agli utenti di scorrere tra le pagine di contenuti. - Layout di flusso: container monodimensionali adattabili (
FlowRoweFlowColumn) che spostano automaticamente gli elementi in eccesso nella riga o colonna successiva quando lo spazio si esaurisce. - Griglia: una struttura flessibile e bidimensionale che mostra gli elementi in layout a più colonne o più righe che si adattano alle dimensioni del contenitore.
- FlexBox: un contenitore adattivo ispirato a CSS Flexbox che offre un controllo granulare su come gli elementi vengono raggruppati, ingranditi, ridotti e allineati lungo gli assi principale e trasversale per riempire lo spazio disponibile.
Scegli il contenitore di layout corretto
Quando crei layout in Compose, la scelta tra container di layout di base e più avanzati dipende dal design, dal fatto che gli elementi debbano andare a capo quando lo spazio è limitato e dal modo in cui gli elementi vengono ridimensionati dinamicamente.
La tabella seguente riassume le funzionalità di ciascuno dei container di layout Compose 1D:
Container |
Va a capo con gli elementi |
Per-item grow |
Per-item shrink |
Dimensioni iniziali per articolo |
Gli elementi si espandono per riempire lo spazio disponibile su più righe |
Riordinare gli elementi |
Caricamento lento |
Ideale per: |
Riga / colonna |
❌ |
✅ (tramite |
❌ |
❌ |
❌ |
❌ |
❌ |
|
FlowRow / FlowColumn |
✅ |
Limitato |
❌ |
❌ |
Parziale |
❌ |
❌ |
|
LazyRow / LazyColumn |
❌ |
❌ |
❌ |
❌ |
❌ |
❌ |
✅ |
|
FlexBox |
✅ |
✅ |
✅ |
✅ |
✅ |
✅ |
❌ |
|
La seguente tabella riassume le funzionalità di Grid e di altri componibili simili:
Container |
Allineamento 2D esatto |
Estensione degli elementi (colonne) |
Estensione degli elementi (righe) |
Caricamento lento |
Ideale per: |
Griglia |
✅ |
✅ (tramite |
✅ |
❌ |
|
LazyVerticalGrid |
✅ |
✅ (tramite |
❌ |
✅ |
|
LazyStaggeredGrid |
❌ (solo 1D) |
Parziale (solo intervallo completo) |
❌ |
✅ |
|
LazyHorizontalGrid |
✅ |
❌ |
✅ |
✅ |
|
Combinazione di righe e colonne |
❌ |
❌ |
❌ |
❌ |
|