Window Size Class — qué es, clases de tamaño y desarrollo

Autor: IT Sectr Publicado: 2026-06-08 Tiempo de lectura: 9 min

Window Size Class es una API de Jetpack WindowManager que divide la ventana de la aplicación en tres categorías: Compact, Medium y Expanded. En lugar de verificar la resolución física o la densidad de píxeles, las clases analizan el ancho disponible en dp — esto da un resultado predecible en cualquier dispositivo. Según Android Developers Documentation (2025), Window Size Class se ha convertido en el estándar para interfaces adaptativas en Jetpack Compose y el sistema View gracias a WindowManager.

Puntos clave

  • Window Size Class — API para categorizar el ancho de ventana en Compact, Medium y Expanded.
  • Compact — clase para ventanas estrechas de hasta 600 dp, típicas de teléfonos en modo retrato.
  • Medium — clase para ventanas de 600–840 dp, características de tabletas en retrato y teléfonos en paisaje.
  • Expanded — clase para ventanas anchas desde 840 dp, presentes en tabletas y escritorio.
  • Material Design 3 usa Window Size Class como base para el diseño adaptativo.

¿Qué es Window Size Class?

Window Size Class es una API de la plataforma Android incluida en la biblioteca Jetpack WindowManager que clasifica el espacio disponible de la ventana de la aplicación en tres categorías. A diferencia del enfoque tradicional con calificadores de recursos (small/large/xlarge), Window Size Class proporciona un conjunto discreto de valores en los que el desarrollador puede apoyarse al diseñar la interfaz.

La API apareció en Android 7.0 Nougat como parte del soporte para modo multiventana, pero la adopción activa comenzó con Jetpack WindowManager 1.1 (2022). Google recomienda Window Size Class como la herramienta principal para construir diseños adaptativos en lugar de verificar el ancho de pantalla mediante Display.getSize().

La clasificación se basa en el ancho de la ventana en dp, no en el tamaño físico o la densidad de píxeles. Esto significa que dos dispositivos con diferentes resoluciones pero el mismo ancho en dp recibirán la misma clase — la interfaz será predeciblemente idéntica.

Tres clases de tamaño de ventana en Android

Compact — clase para ventanas de hasta 600 dp de ancho. Teléfono en modo retrato, la mayoría de los plegables (Galaxy Z Flip) en estado plegado. La interfaz se construye en una columna, navegación mediante Bottom Navigation.

Medium — clase para ventanas de 600–840 dp de ancho. Tableta en retrato, teléfono en paisaje, dispositivo plegable en estado semiabierto. La interfaz usa dos columnas — por ejemplo, una lista a la izquierda y detalles a la derecha. Navigation Rail reemplaza a Bottom Navigation.

Expanded — clase para ventanas desde 840 dp de ancho. Tableta en paisaje, ventana de escritorio, dispositivo plegable en estado desplegado. La interfaz puede usar tres o más paneles, Permanent Navigation Drawer, paneles de herramientas.

En Material Design 3, se definen componentes adaptativos para cada clase: Navigation Rail para Medium, Navigation Drawer para Expanded, Bottom Navigation para Compact. El desarrollador no necesita seleccionar breakpoints — ya están definidos por la API.

Cómo funciona Window Size Class

Window Size Class se calcula basándose en el ancho actual de la ventana de la aplicación en dp, teniendo en cuenta los elementos del sistema — barra de estado, barra de navegación, división de pantalla en modo Split Screen. La API se activa cuando cambia la configuración de la ventana: rotación del dispositivo, entrada en modo multiventana, despliegue de un dispositivo plegable.

Para obtener la clase se utiliza la clase WindowSizeClass de la biblioteca androidx.window. El desarrollador se suscribe a un Flow (Kotlin) o LiveData (Java) que actualiza automáticamente la clase con cada cambio de tamaño de ventana — sin manejo manual de onConfigurationChanged.

La clasificación ocurre en tres pasos. Primero — medir el ancho actual de la ventana en píxeles. Segundo — convertir a dp mediante DisplayMetrics.density. Tercero — comparar el valor obtenido con los umbrales: menos de 600 dp — Compact, 600–840 — Medium, desde 840 — Expanded.

kotlin
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass()

when (windowSizeClass.windowWidthSizeClass) {
    WindowWidthSizeClass.COMPACT -> // compact width
    WindowWidthSizeClass.MEDIUM  -> // medium width
    WindowWidthSizeClass.EXPANDED -> // expanded width
}

Además del ancho (windowWidthSizeClass), la API proporciona una clase para la altura de la ventana (windowHeightSizeClass) — útil para orientación paisaje y ventanas de escritorio.

Window Size Class en Jetpack Compose

En Jetpack Compose, Window Size Class se utiliza a través de la función currentWindowAdaptiveInfo(), que devuelve WindowAdaptiveInfo con las clases de ancho y alto. Esta función tiene en cuenta no solo el tamaño de la ventana sino también el tipo de entrada (teclado, ratón, táctil) — a través de WindowPosture y WindowLayoutInfo.

Un escenario típico es cambiar entre diseños según la clase. Por ejemplo, en Compact se muestra un BottomSheet con selección, en Medium — un panel lateral, en Expanded — un Navigation Drawer permanente.

kotlin
@Composable
fun AdaptiveNavigation(windowSizeClass: WindowWidthSizeClass) {
    when (windowSizeClass) {
        WindowWidthSizeClass.COMPACT -> BottomNavigation()
        WindowWidthSizeClass.MEDIUM  -> NavigationRail()
        WindowWidthSizeClass.EXPANDED -> NavigationDrawer()
    }
}

En Material Design 3, los componentes NavigationSuiteScaffold se adaptan automáticamente a Window Size Class — el desarrollador no necesita escribir lógica condicional.

Window Size Class y Material Design 3

Material Design 3 (Material You) está completamente integrado con Window Size Class. El sistema de diseño adaptativo en Material 3 determina qué componente de navegación usar para cada clase: BottomNavigation para Compact, NavigationRail para Medium, NavigationDrawer para Expanded.

Esta integración funciona a nivel de Adaptive API, que combina Window Size Class con otras señales — FoldState (dispositivo plegable) y WindowPosture (posición de pantalla). Adaptive API está disponible a través de la biblioteca material3-adaptive.

Material 3 proporciona cuatro componentes adaptativos de nivel superior: ListDetailPaneScaffold, SupportingPaneScaffold, NavigationSuiteScaffold y AdaptiveSheet. Cada uno cambia su comportamiento según Window Size Class sin configuración adicional.

ClaseComponente de navegaciónPane Scaffold
CompactBottom NavigationPanel oculto
MediumNavigation RailPanel deslizante
ExpandedNavigation DrawerPanel permanente

Ventajas de los diseños adaptativos

El uso de Window Size Class proporciona tres ventajas clave en el desarrollo móvil. Primera — previsibilidad: en lugar de cientos de combinaciones de tamaños de pantalla, el desarrollador trabaja con tres clases. Esto reduce radicalmente el número de escenarios de prueba y bugs relacionados con el diseño.

Segunda — adaptación automática al modo multiventana. Cuando el usuario entra en Split Screen, el ancho de la ventana cambia — Window Size Class se recalcula instantáneamente y la interfaz se adapta. Sin esta API, la aplicación en pantalla dividida muestra una versión reducida de la interfaz de teléfono.

Tercera — consistencia con Material Design 3. Google ha incorporado Window Size Class en el sistema de componentes adaptativos, por lo que las interfaces construidas sobre Material 3 siguen automáticamente las recomendaciones de diseño de Google para pantallas grandes sin trabajo adicional.

Preguntas frecuentes

¿En qué se diferencia Window Size Class de Screen Size Buckets?

Screen Size Buckets (small/large/xlarge) es un enfoque obsoleto de Android 1.6–6.0 basado en el tamaño físico de la pantalla. Window Size Class se centra en el ancho disponible de la ventana en dp y funciona en tiempo real cuando cambia el tamaño de la ventana.

¿Es necesario soportar Window Size Class en Android 6 y versiones anteriores?

Window Size Class está disponible a través de Jetpack WindowManager en Android 7.0+ con una biblioteca backport. Para Android 6 y versiones anteriores — solo Compact, ya que no hay modo multiventana. Use fallback mediante WindowMetrics.

¿Cómo funciona Window Size Class en dispositivos plegables?

Al desplegar el dispositivo, el ancho de la ventana cambia y Window Size Class se recalcula automáticamente. La clase puede cambiar de Compact a Expanded debido al aumento del área disponible.

¿Se puede usar Window Size Class en diseño XML (Views)?

Sí, a través de WindowManager en Activity o Fragment. Después de obtener WindowSizeClass, use lógica condicional para cambiar entre diseños XML o modificar la visibilidad de las Views.

¿Qué umbrales se usan para WindowHeightSizeClass?

Para la altura de la ventana, los umbrales difieren: Compact — hasta 480 dp, Medium — 480–900 dp, Expanded — desde 900 dp. WindowHeightSizeClass es útil en orientación paisaje y en escritorio.

Resumen

  • Window Size Class — API de Jetpack WindowManager para categorizar el ancho de ventana en Compact, Medium y Expanded.
  • Compact — hasta 600 dp, interfaz de una columna, Bottom Navigation.
  • Medium — 600–840 dp, interfaz de dos columnas, Navigation Rail.
  • Expanded — desde 840 dp, interfaz multipanel, Navigation Drawer.
  • Jetpack Compose — función currentWindowAdaptiveInfo() para obtener la clase en tiempo de ejecución.
  • Material Design 3 — componentes adaptativos que reaccionan automáticamente a Window Size Class.
  • Conclusión — Window Size Class reemplaza la adaptación tradicional basada en breakpoints y hace que las interfaces sean predecibles en todos los dispositivos.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también