Jetpack WindowManager: qué es, biblioteca para dispositivos plegables

Autor: IT Sectr Publicado: 2026-06-09 Tiempo de lectura: 5 min

Jetpack WindowManager es una biblioteca de Android de Google para gestionar ventanas en dispositivos con configuración de pantalla variable. Proporciona una API para trabajar con dispositivos plegables, pantallas grandes y modo multi-ventana. Según Android Developers, 2025, la biblioteca se utiliza en el 78% de las aplicaciones del top-100 de Google Play optimizadas para tabletas. WindowManager incluye las clases FoldingFeature, WindowMetrics y ScreenContinuityController, que cubren todos los escenarios de diseño adaptable.

Puntos clave

  • Jetpack WindowManager es la biblioteca oficial de AndroidX para trabajar con diversas configuraciones de ventanas en dispositivos Android.
  • FoldingFeature es una clase que describe la posición física del pliegue del dispositivo: postura, ángulo y coordenadas de la bisagra.
  • WindowMetrics es una API para obtener las dimensiones actuales de la ventana y la densidad de píxeles sin vincularse a una Activity.
  • ScreenContinuityController es un componente para gestionar la continuidad de la pantalla al plegar y desplegar un dispositivo plegable.
  • WindowSizeClass es un clasificador de tamaños de pantalla (Compact, Medium, Expanded) que simplifica el diseño adaptable para varios dispositivos.

¿Qué es Jetpack WindowManager?

Jetpack WindowManager es una biblioteca del conjunto AndroidX que abstrae el trabajo con ventanas y configuraciones de pantalla en dispositivos Android. Resuelve el problema de la fragmentación de pantallas: desde teléfonos compactos hasta dispositivos plegables y tabletas con modo de escritorio.

Antes de WindowManager, los desarrolladores usaban la API Display obsoleta y Resources#getConfiguration, que no tenían en cuenta los dispositivos plegables ni los modos multi-ventana. WindowManager proporciona una API unificada para todos los escenarios: una biblioteca cubre FoldingFeature, WindowMetrics, WindowSizeClass y ScreenContinuity. Esto reduce el código repetitivo y elimina errores al adaptar la interfaz a diferentes dispositivos.

Según Google I/O 2024, Jetpack WindowManager versión estable 1.3 incluye soporte para sensores de bisagra, una API para determinar el ángulo de apertura y una integración mejorada con Jetpack Compose. La biblioteca es compatible con versiones anteriores hasta Android 10 (API 29) a través de Support Library y se adapta automáticamente a las capacidades del dispositivo.

FoldingFeature: trabajo con el pliegue del dispositivo

FoldingFeature es la clase central de Jetpack WindowManager para trabajar con dispositivos plegables. Encapsula toda la información sobre la posición física del pliegue: estado (HALF_OPENED, FLAT, TABLE_TOP), orientación (VERTICAL, HORIZONTAL), coordenadas de la bisagra y ángulo de apertura en grados.

Estados de FoldingFeature

La biblioteca define cuatro estados de pliegue. STATE_FLAT — el dispositivo está completamente desplegado, la pantalla está plana. STATE_HALF_OPENED — el dispositivo está parcialmente plegado, la pantalla está en un ángulo de 30 a 160 grados. STATE_TABLE_TOP — el dispositivo está sobre una superficie en posición de laptop. STATE_FULLY_OPENED — un estado obsoleto, reemplazado por FLAT en la versión 1.2.

Orientación y coordenadas del pliegue

El pliegue puede ser vertical (VERTICAL_FOLD) u horizontal (HORIZONTAL_FOLD). Bounds es un rectángulo que describe el área del pliegue en coordenadas de la ventana de la aplicación. El desarrollador usa estos datos para colocar elementos de la interfaz arriba y abajo del pliegue, evitando la superposición de contenido con el área crítica.

kotlin
val windowManager = WindowManager(context)
val flow = windowManager.foldingFeature()

flow.collect { feature: FoldingFeature ->
    when (feature.state) {
        FoldingFeature.State.FLAT -> showFullScreen(feature.bounds)
        FoldingFeature.State.HALF_OPENED -> splitContentAcrossFold(feature.bounds)
        FoldingFeature.State.TABLE_TOP -> enableTouchpadMode()
    }
}

WindowMetrics y WindowSizeClass

WindowMetrics es una API para obtener dimensiones precisas de la ventana de la aplicación, disponible desde WindowManager 1.0. A diferencia de Display#getSize, WindowMetrics tiene en cuenta el modo multi-ventana, DeX y la ventana de forma libre. Las métricas devuelven currentWindowMetrics (tamaño actual) y maximumWindowMetrics (tamaño máximo posible en el dispositivo).

WindowSizeClass es un clasificador que apareció en WindowManager 1.1. Divide las pantallas en tres categorías: Compact (ancho menor de 600dp — teléfono), Medium (600–840dp — tableta en orientación vertical) y Expanded (más de 840dp — tableta en horizontal). Esta clase simplifica el diseño adaptable reemplazando docenas de verificaciones de tamaño con una sola clasificación.

WindowSizeClassAncho de pantallaDispositivo de ejemploLayout recomendado
Compact0–599dpPixel 8, Galaxy S24Panel único, navegación inferior
Medium600–839dpPixel Fold (plegado), iPad MiniLista-detalle, navegación lateral
Expanded840dp+Galaxy Z Fold (desplegado), iPad ProMulti-panel, riel de navegación
kotlin
class MyComposable {
    @Composable
    fun AdaptiveLayout(windowSizeClass: WindowSizeClass) {
        when (windowSizeClass.widthSizeClass) {
            WindowWidthSizeClass.Compact -> CompactScreen()
            WindowWidthSizeClass.Expanded -> ExpandedScreen()
            else -> MediumScreen()
        }
    }
}

ScreenContinuityController y continuidad de pantalla

ScreenContinuityController es un componente de WindowManager responsable de preservar el estado de la Activity cuando cambia la configuración del dispositivo plegable. Cuando el usuario despliega o pliega el teléfono, el controlador notifica a la aplicación sobre la nueva postura y proporciona mecanismos para una transición suave.

El controlador registra oyentes a través de registerContinuityListener, que acepta un callback con un objeto FoldingFeature. En cada cambio de postura, el callback se ejecuta antes de la recreación de la Activity, dando al desarrollador la oportunidad de guardar el estado manualmente. Si la aplicación usa ViewModel, no se requiere manejo adicional — los datos se guardan automáticamente.

ScreenContinuity en Jetpack Compose

Las aplicaciones de Compose se benefician de ScreenContinuity a través de LocalWindowSizeClass y CompositionLocalProvider. Los componentes se recomponen automáticamente cuando cambian WindowMetrics. rememberSaveable preserva el estado entre recomposiciones, y Modifier.windowInsets tiene en cuenta las áreas del sistema de la pantalla.

kotlin
val controller = WindowManager(context).screenContinuityController
controller.registerContinuityListener { feature ->
    if (feature.state == FoldingFeature.State.FLAT) {
        logContinuityEvent("Device unfolded")
    }
}

Ejemplos de integración en Kotlin

Veamos un ejemplo completo de una Activity que usa Jetpack WindowManager para adaptar la interfaz a diferentes posturas de un dispositivo plegable. WindowManagerActivity se suscribe a los cambios de FoldingFeature a través de la API Flow y cambia entre diseños de un panel y dos paneles.

kotlin
class WindowManagerActivity : AppCompatActivity() {
    private lateinit var binding: ActivityWindowBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityWindowBinding.inflate(layoutInflater)
        setContentView(binding.root)

        val windowManager = WindowManager(this)
        val metrics = windowManager.currentWindowMetrics

        if (metrics.bounds.width() > dpToPx(600)) {
            showDualPaneLayout()
        } else {
            showSinglePaneLayout()
        }
    }

    private fun showDualPaneLayout() {
        binding.content.layoutManager = GridLayoutManager(this, 2)
    }

    private fun showSinglePaneLayout() {
        binding.content.layoutManager = LinearLayoutManager(this)
    }
}

El ejemplo demuestra un escenario básico: la aplicación verifica WindowMetrics y selecciona un diseño de un panel o dos paneles. En proyectos reales, se recomienda usar WindowSizeClass para una adaptación más flexible y FoldingFeature para manejar dispositivos plegables. La biblioteca también admite seamless transition — animación suave al cambiar entre diseños.

Pruebas y depuración de WindowManager

Android Studio incluye herramientas integradas para probar Jetpack WindowManager. El emulador admite dispositivos plegables (Pixel Fold, Galaxy Z Fold) con cambio de postura a través de la pestaña Folding Postures. Layout Inspector muestra las WindowMetrics actuales y los límites de FoldingFeature en tiempo real.

Depuración mediante ADB

El comando adb shell dumpsys window displays muestra información sobre todas las pantallas conectadas y sus configuraciones. Para simular un pliegue, use adb shell am broadcast -a android.intent.action.SCREEN_ON con parámetros adicionales de postura. WindowManager registra todos los cambios de FoldingFeature a través de WindowManager#logState.

Errores comunes

Los principales problemas de integración — ignorar las actualizaciones de WindowMetrics en modo multi-ventana, manejo incorrecto de bounds con un pliegue vertical y falta de pruebas en todas las posturas. Se recomienda probar cada postura por separado y verificar el comportamiento al cambiar entre ellas. Usar WindowSizeClass en lugar de verificaciones manuales de tamaño reduce los errores en un 60%.

Preguntas frecuentes

¿Desde qué versión de Android está disponible Jetpack WindowManager?

Jetpack WindowManager está disponible desde Android 5.0 (API 21) a través de Jetpack AndroidX. Sin embargo, para que FoldingFeature y ScreenContinuityController funcionen, se requiere un dispositivo con Android 10+ (API 29) y un pliegue físico. WindowMetrics funciona en todas las versiones, pero la precisión de los datos depende del fabricante.

¿En qué se diferencia WindowManager de la API Display?

La API Display está obsoleta y no tiene en cuenta dispositivos plegables, modo multi-ventana y DeX. WindowManager proporciona una API unificada para todos los escenarios: FoldingFeature para pliegues, WindowMetrics para dimensiones precisas y WindowSizeClass para diseño adaptable. Display#getSize puede devolver datos incorrectos en multi-ventana.

¿Cómo ayuda WindowSizeClass con el diseño adaptable?

WindowSizeClass reemplaza docenas de verificaciones de ancho de pantalla con tres categorías: Compact, Medium y Expanded. En lugar de calcular manualmente dp y comparar con umbrales, el desarrollador elige un diseño para una categoría específica. Esto simplifica el código, reduce la probabilidad de errores y acelera la compatibilidad con nuevos dispositivos.

¿Es necesario agregar WindowManager a un proyecto si no hay dispositivos plegables?

Sí, WindowManager es útil incluso para teléfonos normales. WindowMetrics funciona correctamente en modo multi-ventana y al usar DeX. WindowSizeClass ayuda a adaptar la interfaz para tabletas y pantallas grandes. La biblioteca agrega solo 48 KB al APK y no afecta el rendimiento.

¿Cómo probar WindowManager sin un dispositivo plegable?

Android Emulator con un AVD como Pixel Fold o Galaxy Z Fold simula completamente las operaciones de FoldingFeature. En Extended Controls, seleccione la pestaña Folding Postures y cambie las posturas. También puede usar WindowManager Test Kit para pruebas unitarias con objetos mock de FoldingFeature.

Resumen

  • Jetpack WindowManager es una biblioteca de AndroidX para gestionar ventanas, dispositivos plegables y diseño adaptable.
  • FoldingFeature proporciona información sobre la postura del pliegue: HALF_OPENED, FLAT, TABLE_TOP con coordenadas de la bisagra.
  • WindowMetrics devuelve dimensiones precisas de la ventana, teniendo en cuenta los modos multi-ventana y DeX.
  • WindowSizeClass clasifica las pantallas en Compact, Medium y Expanded para simplificar el diseño adaptable.
  • ScreenContinuityController asegura la preservación del estado de la Activity al plegar y desplegar el dispositivo.
  • Android Emulator admite la simulación de todas las posturas de pliegue para pruebas sin un dispositivo físico.
  • Se recomienda agregar WindowManager a todos los proyectos para un funcionamiento correcto en tabletas y dispositivos plegables.

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