Diseños canónicos de pantalla grande

Los diseños canónicos de pantalla grande son diseños de apps versátiles y comprobados que proporcionan una experiencia del usuario óptima en dispositivos con pantalla grande.

Representación de dispositivos con pantalla grande que muestran los diseños canónicos

Los diseños canónicos son responsivos y adaptables. Son compatibles con teléfonos de pantalla pequeña y con tablets, plegables y dispositivos ChromeOS. Derivados de la guía de Material Design, los diseños son estéticos y funcionales.

El framework de Android incluye componentes especializados que hacen que la implementación de los diseños sea sencilla y confiable mediante vistas o Jetpack Compose.

Los diseños canónicos crean IUs atractivas y que mejoran la productividad, lo que constituye la base de apps excelentes.

Si ya conoces los diseños canónicos de pantalla grande, pero no sabes qué APIs de Android usar para tu app, consulta la sección Aplicabilidad más abajo y obtén ayuda para determinar cuál es el diseño correcto en los casos de uso de tu app.

Lista-detalles

Esquema de página del diseño de lista-detalles.

El diseño de lista-detalles les permite a los usuarios explorar las listas de elementos que tienen información descriptiva, explicativa o de otro tipo: los detalles del elemento.

El diseño divide la ventana de la app en dos paneles paralelos: uno para la lista y otro para los detalles. Los usuarios seleccionan elementos de la lista para ver sus detalles. Los vínculos directos en los detalles muestran contenido adicional en el panel de detalles.

Las pantallas de ancho expandido (consulta las clases de tamaño de ventana) admiten la lista y los detalles al mismo tiempo. La selección de un elemento de lista actualiza el panel de detalles para mostrar el contenido relacionado del elemento seleccionado.

Las pantallas de ancho mediano y compacto muestran la lista o los detalles, según la interacción del usuario con la app. Cuando solo se ve la lista, la selección de un elemento muestra los detalles en lugar de la lista. Cuando solo se vean los detalles, se volverá a mostrar la lista si se presiona el botón Atrás.

Los cambios de configuración, como la orientación del dispositivo o el tamaño de la ventana de la app, pueden modificar la clase de tamaño de la ventana de la pantalla. Un diseño de lista-detalles responde en consecuencia y mantiene el estado de la app de la siguiente manera:

  • Si una pantalla de ancho expandido que muestra los paneles de lista y de detalles se reduce a tamaño mediano o compacto, el panel de detalles permanece visible y el panel de lista se oculta.
  • Si una pantalla de ancho mediano o compacto tiene solo el panel de detalles visible y la clase de tamaño de ventana se expande, la lista y los detalles se muestran juntos, y la lista indica que el elemento correspondiente al contenido en el panel de detalles está seleccionado.
  • Si una pantalla de ancho mediano o compacto tiene solo el panel de lista visible y se expande, se mostrarán juntos la lista y un panel de detalles de marcador de posición.

El diseño de lista-detalles es ideal para apps de mensajería, administradores de contactos, navegadores de archivos o cualquier app en la que el contenido se pueda organizar como una lista de elementos que muestran información adicional.

Figura 1: App de mensajería que muestra una lista de conversaciones y los detalles de una conversación seleccionada

Implementación

Se puede crear un diseño de lista-detalles con una variedad de tecnologías, como Compose, vistas y la incorporación de actividades (para apps heredadas). Consulta Aplicabilidad a continuación para obtener ayuda y decidir qué tecnología se adapta mejor a tu app.

Compose

El paradigma declarativo de Compose admite la lógica de clase de tamaño de ventana que determina si se muestran los paneles de lista y de detalles al mismo tiempo (cuando se expande la clase de tamaño de ancho de ventana) o solo el panel de lista o de detalles (cuando la clase de tamaño de ventana de ancho es mediana o compacta).

Para garantizar el flujo unidireccional de datos, eleva todo el estado, lo que incluye la clase de tamaño de ventana actual y los detalles del elemento seleccionado actualmente (si corresponde), de modo que todos los elementos de componibilidad tengan acceso a los datos y puedan renderizarse sin problemas.

Cuando se muestre solo el panel de detalles en tamaños de ventana pequeños, agrega BackHandler para quitar el panel de detalles y mostrar solo el panel de lista. BackHandler no forma parte de la navegación general de la app, ya que el controlador depende de la clase de tamaño de ventana y del estado de detalles seleccionado.

Para ver una muestra de implementación, consulta el ejemplo de lista y detalles con Compose.

Vistas y fragmentos

La biblioteca SlidingPaneLayout está diseñada para implementar de manera sencilla diseños de lista-detalles basados en vistas o fragmentos.

Primero, declara un SlidingPaneLayout como elemento raíz de tu diseño XML. A continuación, agrega los dos elementos secundarios (vistas o fragmentos) que representen el contenido de la lista y los detalles.

Implementa una metodología de comunicación para pasar datos entre las vistas de lista-detalles o los fragmentos. Se recomienda ViewModel debido a su capacidad de almacenar la lógica empresarial y permanecer vigente ante los cambios de configuración.

SlidingPaneLayout determina automáticamente si se muestran la lista y los detalles juntos o de forma individual. En una ventana que tiene suficiente espacio horizontal para adaptarse a ambos, la lista y los detalles aparecen en paralelo. En una ventana que no tiene suficiente espacio, se muestran la lista o los detalles según la interacción del usuario con la app.

Para ver una muestra de implementación, consulta el ejemplo de lista y detalles con vistas.

Incorporación de actividades

Usa la incorporación de actividades para habilitar las apps heredadas de varias actividades a fin de mostrar dos actividades en paralelo en la misma pantalla o apiladas una sobre otra. Si tu app implementa la lista y los detalles de un diseño de lista-detalles en actividades separadas, la incorporación de actividades te permite crear fácilmente un diseño de lista-detalles con una refactorización de código mínima o nula.

Para implementar la incorporación de actividades, especifica una división de la ventana de tareas con un archivo de configuración XML. La división define la actividad principal, que inicia la división, y una actividad secundaria. Especifica un ancho de pantalla mínimo para la división usando los puntos de interrupción de clase de tamaño de ventana. Cuando el ancho de la pantalla es inferior al punto de interrupción mínimo, las actividades se muestran una encima de la otra. Por ejemplo, si el ancho mínimo de la pantalla es de 600 dp, las actividades se mostrarán una encima de la otra en pantallas compactas, pero en paralelo en pantallas medianas y expandidas.

La incorporación de actividades es compatible con Android 12L (nivel de API 32) y versiones posteriores, pero también puede estar disponible en niveles de API inferiores si los fabricantes de dispositivos la implementan. Cuando la incorporación de actividades no está disponible en un dispositivo, el comportamiento de resguardo causa que la actividad de lista o la actividad de detalles ocupe toda la ventana de la app según la interacción del usuario con ella.

Para obtener más información, consulta Incorporación de actividades.

Para ver una muestra de implementación, consulta el ejemplo de lista y detalles con incorporación de actividades.

Feed

Estructura del diseño de feed

Un diseño de feed dispone elementos de contenido equivalentes en una cuadrícula configurable para permitir una visualización rápida y conveniente de una gran cantidad de contenido.

El tamaño y la posición establecen relaciones entre los elementos de contenido.

Los grupos de contenido se crean al hacer que los elementos tengan el mismo tamaño y posicionarlos juntos. Para atraer la atención a los elementos, estos deben ser más grandes que los cercanos.

Las tarjetas y las listas son componentes comunes de los diseños de feed.

Un diseño de feed admite pantallas de casi cualquier tamaño porque la cuadrícula se puede adaptar de una sola columna de desplazamiento a un feed de varias columnas de desplazamiento de contenido.

Los feeds son adecuados sobre todo para las apps de noticias y redes sociales.

Figura 2: App de redes sociales que muestra publicaciones en tarjetas de diferentes tamaños

Implementación

Compose

Un feed consiste de una gran cantidad de elementos de contenido en un contenedor de desplazamiento vertical dispuestos en una cuadrícula. Las listas diferidas renderizan de manera eficiente una gran cantidad de elementos en columnas o filas. Las cuadrículas diferidas renderizan elementos en cuadrículas, lo que admite la configuración de los tamaños y los intervalos de los elementos.

Configura las columnas del diseño de cuadrícula según el área de visualización disponible a fin de establecer el ancho mínimo permitido para los elementos de la cuadrícula. Cuando definas los elementos de la cuadrícula, ajusta los intervalos de columnas para destacar algunos elementos sobre otros.

En los encabezados de sección, los divisores y otros elementos diseñados para ocupar el ancho completo del feed, usa maxLineSpan a fin de ocupar el ancho completo del diseño.

En pantallas de ancho compacto que no tienen suficiente espacio para mostrar más de una columna, LazyVerticalGrid se comporta igual que una LazyColumn.

Para ver una muestra de implementación, consulta el ejemplo de feed con Compose.

Vistas y fragmentos

Una RecyclerView renderiza de manera eficiente una gran cantidad de elementos en una sola columna. Un GridLayoutManager dispone los elementos en una cuadrícula, lo que permite configurar los tamaños y los intervalos de los elementos.

Configura las columnas de la cuadrícula en función del tamaño del área de visualización disponible a fin de establecer el ancho mínimo permitido para los elementos.

La estrategia de intervalo GridLayoutManager predeterminada, que es un intervalo por elemento, se puede anular si se crea un SpanSizeLookup personalizado. Ajusta el intervalo para destacar algunos elementos sobre otros.

En pantallas de ancho compacto que tengan espacio suficiente para una sola columna, usa LinearLayoutManager en lugar de GridLayoutManager.

Para ver una muestra de implementación, consulta el ejemplo de feed con vistas.

Panel complementario

Esquema de página del diseño de panel complementario.

El diseño de panel complementario organiza el contenido de la app en áreas de visualización principales y secundarias.

El área de visualización principal ocupa la mayor parte de la ventana de la app (por lo general, alrededor de dos tercios) y tiene el contenido principal. El área de visualización secundaria es un panel que ocupa el resto de la ventana de la app y presenta contenido complementario del contenido principal.

Los diseños de panel complementario funcionan bien en pantallas de ancho expandido (consulta las clases de tamaño de ventana) en orientación horizontal. Las pantallas de ancho mediano o compacto admiten la visualización de las áreas principal y secundaria si el contenido se adapta a espacios de visualización más estrechos o si el contenido adicional se puede ocultar inicialmente en una hoja inferior o lateral a la que se puede acceder a través de un control, como un menú o un botón.

Un diseño de panel complementario difiere de un diseño de lista-detalles en la relación del contenido principal y secundario. El contenido del panel secundario es significativo solo en relación con el contenido principal. Por ejemplo, una ventana de herramientas del panel complementario es irrelevante por sí sola. Sin embargo, el contenido complementario del panel de detalles de un diseño de lista-detalles es significativo incluso sin el contenido principal. Por ejemplo, la descripción de un producto de una ficha de producto.

Estos son algunos casos de uso del panel complementario:

  • Apps de productividad: Un documento o una hoja de cálculo acompañados de comentarios de revisor en un panel complementario
  • Apps de música: Un video en streaming complementado de una lista de videos relacionados en un panel complementario o la representación de un álbum de música complementado con una playlist
  • Apps de búsqueda y referencias: Un formulario de entrada de consultas con resultados en un panel complementario
Figura 3: App de compras con descripciones de productos en un panel complementario.

Implementación

Redactar

Compose admite la lógica de clase de tamaño de ventana, que te permite determinar si mostrar el contenido principal y el contenido complementario al mismo tiempo, o bien colocar el contenido complementario en una ubicación alternativa.

Eleva todo el estado, incluida la clase de tamaño de ventana actual y la información relacionada con los datos del contenido principal y el contenido complementario.

Para pantallas de ancho compacto, coloca el contenido complementario debajo del contenido principal o dentro de una hoja inferior. En el caso de los anchos medianos y expandidos, coloca el contenido complementario junto al contenido principal y ajusta su tamaño de manera adecuada según el contenido y el espacio disponibles. En el caso del ancho mediano, divide el espacio de la pantalla de manera equitativa entre el contenido principal y el complementario. Para el ancho expandido, asigna el 70% del espacio al contenido principal y el 30% al contenido complementario.

Para ver una muestra de implementación, consulta el ejemplo de panel complementario con Compose.

Vistas y fragmentos

Se implementa un diseño de panel complementario con un diseño de ayuda, como LinearLayout o ConstraintLayout. Establece las clases de tamaño de ventana que dividen la cantidad de espacio de visualización horizontal disponible para tu app en tres categorías: compacta (<600 dp), mediana (>=600 dp) y expandida (>=840 dp).

Para cada clase de tamaño de ventana, define diseños de la siguiente manera:

  • Compacta: En la carpeta layout de recursos de la app, coloca el contenido que renderiza el panel complementario debajo del contenido principal o dentro de una hoja inferior.
  • Mediana: En la carpeta layout-w600dp, proporciona el contenido de panel complementario que da como resultado el contenido principal y la renderización del panel complementario uno al lado del otro, lo que divide el espacio horizontal de la pantalla de manera equitativa.
  • Expandida: En la carpeta layout-w840dp, incluye contenido del panel complementario que genere que el contenido principal y el panel complementario se rendericen en paralelo. Sin embargo, el panel complementario solo ocupa el 30% del espacio horizontal, lo que deja el 70% restante para el contenido principal.

Usa un objeto ViewModel para la comunicación entre el contenido principal y el panel complementario, ya sea mediante vistas o fragmentos, o una combinación.

Para ver muestras de implementación, consulta los siguientes ejemplos:

Aplicabilidad

Los diseños canónicos crean presentaciones polifacéticas de contenido para facilitar el acceso y la exploración profunda. Usa el siguiente diagrama de flujo a fin de determinar qué estrategia de implementación y diseño es la más adecuada para los casos de uso de tu app.

Para ver ejemplos de diseños canónicos implementados en diferentes tipos de apps, consulta la galería de pantallas grandes.

Figura 4: Árbol de decisión de diseño canónico de pantalla grande

Recursos adicionales