DEV Community

Cover image for 🪟 Window Size Class: migrando de androidx.window a Material 3 Adaptive
Marlon López
Marlon López

Posted on

🪟 Window Size Class: migrando de androidx.window a Material 3 Adaptive

(Imagen de portada: Representaciones de clases de tamaños de ventana basadas en el ancho, creditos a Google).

Versión en inglés: Aquí.

En los últimos años, el ecosistema Android ha ido abrazando cada vez más el diseño adaptativo. Desde el auge de los dispositivos plegables hasta las pantallas grandes, la gestión del tamaño de ventana (WindowSizeClass) se volvió clave para ofrecer experiencias fluidas en cualquier formato.

Con la llegada de Material 3 Adaptive, Google propone una nueva forma de manejar las clases de tamaño de ventana, integrando este concepto directamente en las librerías de Material Design.
En este artículo quiero compartir mi experiencia migrando de androidx.window a la nueva API de Material 3, los retos que encontré y las ventajas que trae este cambio.

🧩 1. Contexto: el enfoque anterior (androidx.window)

Hasta hace poco, la forma más común de calcular clases de tamaño era usando:

import androidx.window.layout.WindowMetricsCalculator

val metrics = WindowMetricsCalculator.getOrCreate().computeCurrentWindowMetrics(activity)
val width = metrics.bounds.width()
val height = metrics.bounds.height()
Enter fullscreen mode Exit fullscreen mode

Luego, se derivaba manualmente la clase de tamaño (compact, medium, expanded) o se usaba la extensión WindowSizeClass de androidx.compose.material3.windowsizeclass.
Esto funcionaba bien, pero requería una configuración manual y estaba algo separado de las prácticas modernas de Material 3.

🧱 2. Material 3 Adaptive: el nuevo camino

Material 3 introduce una nueva API unificada para manejar layouts adaptativos, integrando mejor las clases de tamaño con los componentes de diseño.

Ahora puedes usar:

import androidx.compose.material3.adaptive.WindowAdaptiveInfo
import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
val adaptiveInfo = currentWindowAdaptiveInfo()
val windowSizeClass = adaptiveInfo.windowSizeClass
Enter fullscreen mode Exit fullscreen mode

Esto simplifica el acceso al tamaño actual de la ventana y lo conecta con otros elementos del sistema adaptativo (por ejemplo, NavigationSuiteScaffold o PaneScaffold).

🔄 3. El proceso de migración

Durante la migración, los pasos principales fueron:

  1. Eliminar dependencias de androidx.window (por ejemplo, androidx.window:window o androidx.window:window-java).
  2. Actualizar las dependencias de Material 3 a una versión que soporte adaptive.
  3. Reemplazar las funciones de cálculo de métricas por el uso de currentWindowAdaptiveInfo().
  4. Ajustar los puntos de quiebre (breakpoints) si usabas valores personalizados

💡 4. Beneficios del nuevo enfoque

  • ✅ Integración directa con los componentes adaptativos de Material 3.
  • 🧭 Menos boilerplate: no hay que calcular métricas manualmente.
  • 💥 Mejor soporte futuro para pantallas plegables y multitareas.
  • 🧩 Cohesión visual: Material 3 adapta más fácilmente las interfaces según el tamaño.

⚠️ 5. Consideraciones y limitaciones

  • Algunas funciones avanzadas de androidx.window (como FoldingFeature) aún pueden requerir
  • código adicional.
  • El soporte completo depende de la versión de Compose y de las librerías de Material 3.
  • Aún está en evolución, así que puede haber cambios menores en las APIs`.

🚀 6. Conclusión

La migración a Material 3 Adaptive no solo es sencilla, sino que alinea tu app con el futuro del diseño adaptativo en Android.
Si ya estás usando WindowSizeClass, el cambio te permitirá mantener una base más limpia, moderna y escalable.

Top comments (0)