Jetpack Compose proporciona varios contenedores de diseño para ayudarte a estructurar y organizar los componentes de la IU. Si bien los elementos de diseño componibles fundamentales, como Row y Column, controlan disposiciones sencillas, muchas apps requieren soluciones de contenedores más responsivas y adaptables a medida que cambian los tamaños de pantalla y aumentan los datos de los usuarios.
Los contenedores de diseño incluyen lo siguiente:
- Listas y cuadrículas diferidas: Son componentes como
LazyColumn,LazyRowyLazyVerticalGridque muestran de manera eficiente conjuntos de datos grandes o de tamaño dinámico, ya que solo componen y disponen los elementos visibles en el viewport. - Pager: Son contenedores como
HorizontalPageryVerticalPagerque permiten que los usuarios se deslicen o se desplacen entre páginas de contenido. - Diseños de flujo: Son contenedores unidimensionales responsivos (
FlowRowyFlowColumn) que ajustan automáticamente los elementos que se desbordan a la siguiente fila o columna cuando se agota el espacio. - Cuadrícula: Es una estructura flexible y bidimensional que muestra elementos en diseños de varias columnas o filas que se adaptan al tamaño del contenedor.
- FlexBox: Es un contenedor adaptable inspirado en CSS Flexbox que proporciona un control detallado sobre cómo los elementos se ajustan, crecen, se reducen y se alinean a lo largo de los ejes principal y cruzado para llenar el espacio disponible.
Elige el contenedor de diseño correcto
Cuando creas diseños en Compose, la elección entre contenedores de diseño básicos y más avanzados depende de tu diseño, de si los elementos deben ajustarse cuando el espacio es limitado y de cómo cambian de tamaño de forma dinámica.
En la siguiente tabla, se resumen las capacidades de cada uno de los contenedores de diseño 1D de Compose:
Contenedor |
Ajusta los elementos a líneas nuevas |
Crecimiento por elemento |
Reducción por elemento |
Tamaño inicial por elemento |
Los elementos se expanden para llenar el espacio disponible en varias líneas |
Cómo reordenar elementos |
Carga diferida |
Ideal para: |
Fila / columna |
❌ |
✅ (a través de |
❌ |
❌ |
❌ |
❌ |
❌ |
|
FlowRow / FlowColumn |
✅ |
Limitado |
❌ |
❌ |
Parcial |
❌ |
❌ |
|
LazyRow / LazyColumn |
❌ |
❌ |
❌ |
❌ |
❌ |
❌ |
✅ |
|
FlexBox |
✅ |
✅ |
✅ |
✅ |
✅ |
✅ |
❌ |
|
En la siguiente tabla, se resumen las capacidades de Grid y otros elementos componibles similares:
Contenedor |
Alineación estricta en 2D |
Abarcar elementos (columnas) |
Abarcar elementos (filas) |
Carga diferida |
Ideal para: |
Cuadrícula |
✅ |
✅ (mediante |
✅ |
❌ |
|
LazyVerticalGrid |
✅ |
✅ (mediante |
❌ |
✅ |
|
LazyStaggeredGrid |
❌ (solo 1D) |
Parcial (solo para el intervalo completo) |
❌ |
✅ |
|
LazyHorizontalGrid |
✅ |
❌ |
✅ |
✅ |
|
Cómo combinar filas y columnas |
❌ |
❌ |
❌ |
❌ |
|