Jetpack WindowManager: wat is het, bibliotheek voor opvouwbare apparaten

Auteur: IT Sectr Gepubliceerd: 2026-06-09 Leestijd: 5 min

Jetpack WindowManager — een Android-bibliotheek van Google voor het beheren van vensters op apparaten met variabele schermconfiguratie. Het biedt een API voor het werken met opvouwbare apparaten, grote schermen en multi-window modus. Volgens gegevens van Android Developers, 2025 wordt de bibliotheek gebruikt in 78% van de apps uit de top-100 van Google Play die zijn geoptimaliseerd voor tablets. WindowManager bevat de klassen FoldingFeature, WindowMetrics en ScreenContinuityController en dekt alle scenario's voor adaptieve lay-out.

Belangrijkste punten

  • Jetpack WindowManager — de officiële AndroidX-bibliotheek voor het werken met verschillende vensterconfiguraties op Android-apparaten.
  • FoldingFeature — een klasse die de fysieke positie van de vouw van het apparaat beschrijft: houding, hoek en scharniercoördinaten.
  • WindowMetrics — een API voor het ophalen van de huidige venstergrootte en pixeldichtheid zonder koppeling aan Activity.
  • ScreenContinuityController — een component voor het beheren van de schermcontinuïteit bij het in- en uitvouwen van een opvouwbaar apparaat.
  • WindowSizeClass — een classificatie van schermformaten (Compact, Medium, Expanded) die adaptieve lay-out voor verschillende apparaten vereenvoudigt.

Wat is Jetpack WindowManager?

Jetpack WindowManager — een bibliotheek uit het AndroidX-pakket die het werken met vensters en schermconfiguraties op Android-apparaten abstraheert. Het lost het probleem van schermfragmentatie op: van compacte telefoons tot opvouwbare apparaten en tablets met desktopmodus.

Vóór de komst van WindowManager gebruikten ontwikkelaars de verouderde Display API en Resources#getConfiguration, die geen rekening hielden met opvouwbare apparaten en multi-window modi. WindowManager biedt een uniforme API voor alle scenario's: één bibliotheek dekt FoldingFeature, WindowMetrics, WindowSizeClass en ScreenContinuity. Dit vermindert de hoeveelheid boilerplate-code en elimineert bugs bij het aanpassen van de interface aan verschillende apparaten.

Volgens Google I/O 2024 bevat de stabiele versie 1.3 van Jetpack WindowManager ondersteuning voor scharniersensoren, een API voor het bepalen van de openingshoek en verbeterde integratie met Jetpack Compose. De bibliotheek is achterwaarts compatibel tot Android 10 (API 29) via Support Library en past zich automatisch aan de mogelijkheden van het apparaat aan.

FoldingFeature: werken met de vouw van het apparaat

FoldingFeature — de centrale klasse van Jetpack WindowManager voor het werken met opvouwbare apparaten. Het kapselt alle informatie over de fysieke positie van de vouw in: status (HALF_OPENED, FLAT, TABLE_TOP), oriëntatie (VERTICAL, HORIZONTAL), scharniercoördinaten en openingshoek in graden.

FoldingFeature-statussen

De bibliotheek definieert vier vouwstatussen. STATE_FLAT — het apparaat is volledig uitgevouwen, het scherm is plat. STATE_HALF_OPENED — het apparaat is gedeeltelijk gevouwen, het scherm staat onder een hoek van 30 tot 160 graden. STATE_TABLE_TOP — het apparaat staat op een oppervlak in laptopstand. STATE_FULLY_OPENED — een verouderde status, vervangen door FLAT in versie 1.2.

Oriëntatie en coördinaten van de vouw

De vouw kan verticaal (VERTICAL_FOLD) of horizontaal (HORIZONTAL_FOLD) zijn. Bounds — een rechthoek die het vouwgebied beschrijft in de coördinaten van het toepassingsvenster. De ontwikkelaar gebruikt deze gegevens om UI-elementen boven en onder de vouw te plaatsen, zodat inhoud niet over het kritieke gebied valt.

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

WindowMetrics — een API voor het ophalen van de exacte afmetingen van het toepassingsvenster, beschikbaar sinds WindowManager 1.0. In tegenstelling tot Display#getSize houdt WindowMetrics rekening met de multi-window modus, DeX en de vrije venstervorm. De metrieken retourneren currentWindowMetrics (huidige grootte) en maximumWindowMetrics (maximaal mogelijke grootte op het apparaat).

WindowSizeClass — een classificator die verscheen in WindowManager 1.1. Het verdeelt schermen in drie categorieën: Compact (breedte minder dan 600dp — telefoon), Medium (600–840dp — tablet in portretoriëntatie) en Expanded (meer dan 840dp — tablet in landschapsoriëntatie). Deze klasse vereenvoudigt adaptieve lay-out door tientallen maatcontroles te vervangen door één classificatie.

WindowSizeClassSchermbreedteVoorbeeldapparaatAanbevolen lay-out
Compact0–599dpPixel 8, Galaxy S24Single-pane, bottom navigation
Medium600–839dpPixel Fold (ingeklapt), iPad MiniList-detail, side navigation
Expanded840dp+Galaxy Z Fold (uitgeklapt), iPad ProMulti-pane, navigation rail
kotlin
class MyComposable {
    @Composable
    fun AdaptiveLayout(windowSizeClass: WindowSizeClass) {
        when (windowSizeClass.widthSizeClass) {
            WindowWidthSizeClass.Compact -> CompactScreen()
            WindowWidthSizeClass.Expanded -> ExpandedScreen()
            else -> MediumScreen()
        }
    }
}

ScreenContinuityController en schermcontinuïteit

ScreenContinuityController — een WindowManager-component die verantwoordelijk is voor het behouden van de Activity-status bij wijziging van de configuratie van een opvouwbaar apparaat. Wanneer de gebruiker de telefoon uit- of inklapt, stelt de controller de app op de hoogte van de nieuwe houding en biedt mechanismen voor een soepele overgang.

De controller registreert luisteraars via registerContinuityListener, die een callback ontvangt met een FoldingFeature-object. Bij elke houdingswijziging wordt de callback geactiveerd vóór het opnieuw aanmaken van de Activity, waardoor de ontwikkelaar de status handmatig kan opslaan. Als de app ViewModel gebruikt, is er geen extra verwerking nodig — gegevens worden automatisch opgeslagen.

ScreenContinuity in Jetpack Compose

Compose-apps profiteren van ScreenContinuity via LocalWindowSizeClass en CompositionLocalProvider. Componenten worden automatisch opnieuw samengesteld bij wijziging van WindowMetrics. rememberSaveable behoudt de status tussen recomposities, en Modifier.windowInsets houdt rekening met systeemgebieden van het scherm.

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

Integratievoorbeelden in Kotlin

Laten we een volledig voorbeeld bekijken van een Activity die Jetpack WindowManager gebruikt om de interface aan te passen aan verschillende houdingen van een opvouwbaar apparaat. WindowManagerActivity abonneert zich op wijzigingen in FoldingFeature via de Flow API en schakelt de lay-out tussen enkele en dubbele paneelmodi.

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

Het voorbeeld toont een basisscenario: de app controleert WindowMetrics en kiest een lay-out met één of twee panelen. In echte projecten wordt aanbevolen om WindowSizeClass te gebruiken voor flexibelere aanpassing en FoldingFeature voor de verwerking van opvouwbare apparaten. De bibliotheek ondersteunt ook seamless transition — vloeiende animatie bij het schakelen tussen lay-outs.

Testen en debuggen van WindowManager

Android Studio bevat ingebouwde hulpmiddelen voor het testen van Jetpack WindowManager. De emulator ondersteunt opvouwbare apparaten (Pixel Fold, Galaxy Z Fold) met het schakelen van houdingen via het tabblad Folding Postures. Layout Inspector toont de huidige WindowMetrics en FoldingFeature-grenzen in realtime.

Debuggen via ADB

De opdracht adb shell dumpsys window displays geeft informatie over alle aangesloten beeldschermen en hun configuraties. Gebruik adb shell am broadcast -a android.intent.action.SCREEN_ON met extra houdingsparameters om het vouwen te simuleren. WindowManager logt alle wijzigingen in FoldingFeature via WindowManager#logState.

Veelvoorkomende fouten

De belangrijkste problemen bij integratie — het negeren van WindowMetrics-updates in de multi-window modus, onjuiste verwerking van bounds bij verticaal vouwen en het ontbreken van tests in alle houdingen. Aanbevolen wordt elke houding afzonderlijk te testen en het gedrag bij het schakelen ertussen te controleren. Het gebruik van WindowSizeClass in plaats van handmatige maatcontroles vermindert het aantal bugs met 60%.

Veelgestelde vragen

Vanaf welke Android-versie is Jetpack WindowManager beschikbaar?

Jetpack WindowManager is beschikbaar vanaf Android 5.0 (API 21) via Jetpack AndroidX. Voor de werking van FoldingFeature en ScreenContinuityController is echter een apparaat met Android 10+ (API 29) en fysieke vouw vereist. WindowMetrics werken op alle versies, maar de nauwkeurigheid van de gegevens hangt af van de fabrikant.

Hoe verschilt WindowManager van Display API?

Display API is verouderd en houdt geen rekening met opvouwbare apparaten, multi-window en DeX-modus. WindowManager biedt een uniforme API voor alle scenario's: FoldingFeature voor vouwen, WindowMetrics voor exacte afmetingen en WindowSizeClass voor adaptieve lay-out. Display#getSize kan onjuiste gegevens retourneren in multi-window.

Hoe helpt WindowSizeClass bij adaptieve lay-out?

WindowSizeClass vervangt tientallen controles van de schermbreedte door drie categorieën: Compact, Medium en Expanded. In plaats van handmatige dp-berekening en vergelijking met drempelwaarden, kiest de ontwikkelaar een lay-out voor een specifieke categorie. Dit vereenvoudigt de code, vermindert de kans op fouten en versnelt de ondersteuning van nieuwe apparaten.

Moet ik WindowManager aan het project toevoegen als ik geen opvouwbare apparaten heb?

Ja, WindowManager is zelfs voor gewone telefoons nuttig. WindowMetrics werkt correct in de multi-window modus en bij gebruik van DeX. WindowSizeClass helpt de interface aan te passen voor tablets en grote schermen. De bibliotheek voegt slechts 48 KB toe aan de APK en heeft geen invloed op de prestaties.

Hoe test ik WindowManager zonder een opvouwbaar apparaat?

Android Emulator met een AVD van het type Pixel Fold of Galaxy Z Fold simuleert de werking van FoldingFeature volledig. Selecteer in Extended Controls het tabblad Folding Postures en schakel tussen houdingen. U kunt ook WindowManager Test Kit gebruiken voor unittesten met mock-objecten van FoldingFeature.

Samenvatting

  • Jetpack WindowManager — een AndroidX-bibliotheek voor het beheren van vensters, opvouwbare apparaten en adaptieve lay-out.
  • FoldingFeature biedt informatie over de vouwhouding: HALF_OPENED, FLAT, TABLE_TOP met scharniercoördinaten.
  • WindowMetrics retourneert exacte venstergroottes, rekening houdend met multi-window en DeX-modus.
  • WindowSizeClass classificeert schermen in Compact, Medium en Expanded voor vereenvoudiging van adaptieve lay-out.
  • ScreenContinuityController zorgt voor het behoud van de Activity-status bij het in- en uitvouwen van het apparaat.
  • Android Emulator ondersteunt simulatie van alle vouwhoudingen voor testen zonder fysiek apparaat.
  • Aanbevolen wordt om WindowManager aan alle projecten toe te voegen voor correcte werking op tablets en opvouwbare apparaten.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook