Jetpack WindowManager : qu'est-ce que c'est, bibliothèque pour appareils pliables

Auteur : IT Sectr Publié le : 2026-06-09 Temps de lecture : 5 min

Jetpack WindowManager est une bibliothèque Android de Google pour la gestion des fenêtres sur les appareils avec configuration d'écran variable. Elle fournit une API pour travailler avec les appareils pliables, les grands écrans et le mode multi-fenêtre. Selon Android Developers, 2025, la bibliothèque est utilisée dans 78% des applications du top-100 Google Play optimisées pour les tablettes. WindowManager inclut les classes FoldingFeature, WindowMetrics et ScreenContinuityController, couvrant tous les scénarios de mise en page adaptative.

Points clés

  • Jetpack WindowManager est la bibliothèque officielle AndroidX pour travailler avec diverses configurations de fenêtres sur les appareils Android.
  • FoldingFeature est une classe qui décrit la position physique du pli de l'appareil : posture, angle et coordonnées de la charnière.
  • WindowMetrics est une API pour obtenir les dimensions actuelles de la fenêtre et la densité de pixels sans liaison à une Activity.
  • ScreenContinuityController est un composant pour gérer la continuité de l'écran lors du pliage et du dépliage d'un appareil pliable.
  • WindowSizeClass est un classifieur de taille d'écran (Compact, Medium, Expanded) simplifiant la mise en page adaptative pour divers appareils.

Qu'est-ce que Jetpack WindowManager ?

Jetpack WindowManager est une bibliothèque de la suite AndroidX qui abstrait le travail avec les fenêtres et les configurations d'écran sur les appareils Android. Elle résout le problème de la fragmentation des écrans : des téléphones compacts aux appareils pliables et aux tablettes en mode bureau.

Avant WindowManager, les développeurs utilisaient l'API Display obsolète et Resources#getConfiguration, qui ne prenaient pas en compte les appareils pliables et les modes multi-fenêtres. WindowManager fournit une API unifiée pour tous les scénarios : une bibliothèque couvre FoldingFeature, WindowMetrics, WindowSizeClass et ScreenContinuity. Cela réduit le code passe-partout et élimine les bugs lors de l'adaptation de l'interface à différents appareils.

Selon Google I/O 2024, Jetpack WindowManager version stable 1.3 inclut la prise en charge des capteurs de charnière, une API pour déterminer l'angle d'ouverture et une intégration améliorée avec Jetpack Compose. La bibliothèque est rétrocompatible jusqu'à Android 10 (API 29) via Support Library et s'adapte automatiquement aux capacités de l'appareil.

FoldingFeature : travailler avec le pli de l'appareil

FoldingFeature est la classe centrale de Jetpack WindowManager pour travailler avec les appareils pliables. Elle encapsule toutes les informations sur la position physique du pli : état (HALF_OPENED, FLAT, TABLE_TOP), orientation (VERTICAL, HORIZONTAL), coordonnées de la charnière et angle d'ouverture en degrés.

États de FoldingFeature

La bibliothèque définit quatre états de pliage. STATE_FLAT — l'appareil est complètement déplié, l'écran est plat. STATE_HALF_OPENED — l'appareil est partiellement plié, l'écran est à un angle de 30 à 160 degrés. STATE_TABLE_TOP — l'appareil est posé sur une surface en posture d'ordinateur portable. STATE_FULLY_OPENED — un état obsolète, remplacé par FLAT dans la version 1.2.

Orientation et coordonnées du pli

Le pli peut être vertical (VERTICAL_FOLD) ou horizontal (HORIZONTAL_FOLD). Bounds est un rectangle décrivant la zone du pli dans les coordonnées de la fenêtre de l'application. Le développeur utilise ces données pour placer les éléments d'interface au-dessus et en dessous du pli, évitant ainsi le chevauchement du contenu avec la zone critique.

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 et WindowSizeClass

WindowMetrics est une API pour obtenir les dimensions précises de la fenêtre de l'application, disponible depuis WindowManager 1.0. Contrairement à Display#getSize, WindowMetrics prend en compte le mode multi-fenêtre, DeX et la fenêtre libre. Les métriques retournent currentWindowMetrics (taille actuelle) et maximumWindowMetrics (taille maximale possible sur l'appareil).

WindowSizeClass est un classifieur apparu dans WindowManager 1.1. Il divise les écrans en trois catégories : Compact (largeur inférieure à 600dp — téléphone), Medium (600–840dp — tablette en orientation portrait) et Expanded (plus de 840dp — tablette en paysage). Cette classe simplifie la mise en page adaptative en remplaçant des dizaines de vérifications de taille par une seule classification.

WindowSizeClassLargeur d'écranAppareil exempleMise en page recommandée
Compact0–599dpPixel 8, Galaxy S24Volet unique, navigation inférieure
Medium600–839dpPixel Fold (plié), iPad MiniListe-détail, navigation latérale
Expanded840dp+Galaxy Z Fold (déplié), iPad ProMulti-volet, rail de navigation
kotlin
class MyComposable {
    @Composable
    fun AdaptiveLayout(windowSizeClass: WindowSizeClass) {
        when (windowSizeClass.widthSizeClass) {
            WindowWidthSizeClass.Compact -> CompactScreen()
            WindowWidthSizeClass.Expanded -> ExpandedScreen()
            else -> MediumScreen()
        }
    }
}

ScreenContinuityController et continuité de l'écran

ScreenContinuityController est un composant de WindowManager chargé de préserver l'état de l'Activity lors du changement de configuration d'un appareil pliable. Lorsque l'utilisateur déplie ou plie le téléphone, le contrôleur notifie l'application de la nouvelle posture et fournit des mécanismes pour une transition en douceur.

Le contrôleur enregistre des écouteurs via registerContinuityListener, qui accepte un callback avec un objet FoldingFeature. À chaque changement de posture, le callback se déclenche avant la recréation de l'Activity, donnant au développeur la possibilité de sauvegarder l'état manuellement. Si l'application utilise ViewModel, aucun traitement supplémentaire n'est nécessaire — les données sont sauvegardées automatiquement.

ScreenContinuity dans Jetpack Compose

Les applications Compose bénéficient de ScreenContinuity via LocalWindowSizeClass et CompositionLocalProvider. Les composants se recomposent automatiquement lorsque WindowMetrics changent. rememberSaveable préserve l'état entre les recompositions, et Modifier.windowInsets prend en compte les zones système de l'écran.

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

Exemples d'intégration en Kotlin

Prenons un exemple complet d'une Activity utilisant Jetpack WindowManager pour adapter l'interface à différentes postures d'un appareil pliable. WindowManagerActivity s'abonne aux changements de FoldingFeature via l'API Flow et alterne entre les mises en page à un et deux volets.

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)
    }
}

L'exemple montre un scénario de base : l'application vérifie WindowMetrics et sélectionne une mise en page à un ou deux volets. Dans les projets réels, il est recommandé d'utiliser WindowSizeClass pour une adaptation plus flexible et FoldingFeature pour la gestion des appareils pliables. La bibliothèque prend également en charge la transition transparente — une animation fluide lors du changement entre les mises en page.

Test et débogage de WindowManager

Android Studio comprend des outils intégrés pour tester Jetpack WindowManager. L'émulateur prend en charge les appareils pliables (Pixel Fold, Galaxy Z Fold) avec changement de posture via l'onglet Folding Postures. Layout Inspector montre les WindowMetrics actuelles et les limites de FoldingFeature en temps réel.

Débogage via ADB

La commande adb shell dumpsys window displays affiche des informations sur tous les écrans connectés et leurs configurations. Pour simuler un pli, utilisez adb shell am broadcast -a android.intent.action.SCREEN_ON avec des paramètres de posture supplémentaires. WindowManager enregistre toutes les modifications de FoldingFeature via WindowManager#logState.

Erreurs courantes

Les principaux problèmes d'intégration — ignorer les mises à jour de WindowMetrics en mode multi-fenêtre, gestion incorrecte des bounds avec un pli vertical et absence de test sur toutes les postures. Il est recommandé de tester chaque posture séparément et de vérifier le comportement lors du passage de l'une à l'autre. L'utilisation de WindowSizeClass au lieu de vérifications manuelles de taille réduit les bugs de 60%.

Foire aux questions

À partir de quelle version d'Android Jetpack WindowManager est-il disponible ?

Jetpack WindowManager est disponible à partir d'Android 5.0 (API 21) via Jetpack AndroidX. Cependant, pour le fonctionnement de FoldingFeature et ScreenContinuityController, un appareil avec Android 10+ (API 29) et un pli physique est requis. WindowMetrics fonctionne sur toutes les versions, mais la précision des données dépend du fabricant.

En quoi WindowManager diffère-t-il de l'API Display ?

L'API Display est obsolète et ne prend pas en compte les appareils pliables, les modes multi-fenêtre et DeX. WindowManager fournit une API unifiée pour tous les scénarios : FoldingFeature pour les plis, WindowMetrics pour les dimensions précises et WindowSizeClass pour la mise en page adaptative. Display#getSize peut retourner des données incorrectes en multi-fenêtre.

Comment WindowSizeClass aide-t-il dans la mise en page adaptative ?

WindowSizeClass remplace des dizaines de vérifications de largeur d'écran par trois catégories : Compact, Medium et Expanded. Au lieu de calculer manuellement les dp et de comparer avec des seuils, le développeur choisit une mise en page pour une catégorie spécifique. Cela simplifie le code, réduit la probabilité d'erreurs et accélère la prise en charge de nouveaux appareils.

Dois-je ajouter WindowManager à un projet s'il n'y a pas d'appareils pliables ?

Oui, WindowManager est utile même pour les téléphones ordinaires. WindowMetrics fonctionne correctement en mode multi-fenêtre et lors de l'utilisation de DeX. WindowSizeClass aide à adapter l'interface pour les tablettes et les grands écrans. La bibliothèque n'ajoute que 48 Ko à l'APK et n'affecte pas les performances.

Comment tester WindowManager sans appareil pliable ?

Android Emulator avec un AVD comme Pixel Fold ou Galaxy Z Fold simule complètement les opérations de FoldingFeature. Dans Extended Controls, sélectionnez l'onglet Folding Postures et changez les postures. Vous pouvez également utiliser WindowManager Test Kit pour les tests unitaires avec des objets mock de FoldingFeature.

Résumé

  • Jetpack WindowManager est une bibliothèque AndroidX pour la gestion des fenêtres, des appareils pliables et de la mise en page adaptative.
  • FoldingFeature fournit des informations sur la posture du pli : HALF_OPENED, FLAT, TABLE_TOP avec les coordonnées de la charnière.
  • WindowMetrics retourne les dimensions précises de la fenêtre, en tenant compte des modes multi-fenêtre et DeX.
  • WindowSizeClass classe les écrans en Compact, Medium et Expanded pour simplifier la mise en page adaptative.
  • ScreenContinuityController assure la préservation de l'état de l'Activity lors du pliage et du dépliage de l'appareil.
  • Android Emulator prend en charge la simulation de toutes les postures de pliage pour les tests sans appareil physique.
  • Il est recommandé d'ajouter WindowManager à tous les projets pour un fonctionnement correct sur les tablettes et les appareils pliables.

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi