Jetpack WindowManager: cos'è, libreria per dispositivi pieghevoli

Autore: IT Sectr Pubblicato: 2026-06-09 Tempo di lettura: 5 min

Jetpack WindowManager è una libreria Android di Google per la gestione delle finestre su dispositivi con configurazione dello schermo variabile. Fornisce un'API per lavorare con dispositivi pieghevoli, schermi grandi e modalità multi-finestra. Secondo Android Developers, 2025, la libreria è utilizzata nel 78% delle app della top-100 di Google Play ottimizzate per tablet. WindowManager include le classi FoldingFeature, WindowMetrics e ScreenContinuityController, coprendo tutti gli scenari di layout adattivo.

Punti chiave

  • Jetpack WindowManager è la libreria ufficiale AndroidX per lavorare con varie configurazioni di finestre su dispositivi Android.
  • FoldingFeature è una classe che descrive la posizione fisica della piega del dispositivo: postura, angolo e coordinate della cerniera.
  • WindowMetrics è un'API per ottenere le dimensioni attuali della finestra e la densità di pixel senza legarsi a un'Activity.
  • ScreenContinuityController è un componente per gestire la continuità dello schermo durante la chiusura e l'apertura di un dispositivo pieghevole.
  • WindowSizeClass è un classificatore di dimensioni dello schermo (Compact, Medium, Expanded) che semplifica il layout adattivo per vari dispositivi.

Cos'è Jetpack WindowManager?

Jetpack WindowManager è una libreria della suite AndroidX che astrae il lavoro con finestre e configurazioni dello schermo su dispositivi Android. Risolve il problema della frammentazione degli schermi: dai telefoni compatti ai dispositivi pieghevoli e ai tablet con modalità desktop.

Prima di WindowManager, gli sviluppatori utilizzavano la vecchia API Display e Resources#getConfiguration, che non tenevano conto dei dispositivi pieghevoli e delle modalità multi-finestra. WindowManager fornisce un'API unificata per tutti gli scenari: una libreria copre FoldingFeature, WindowMetrics, WindowSizeClass e ScreenContinuity. Ciò riduce il codice boilerplate ed elimina i bug nell'adattamento dell'interfaccia a diversi dispositivi.

Secondo Google I/O 2024, Jetpack WindowManager versione stabile 1.3 include il supporto per sensori di cerniera, un'API per determinare l'angolo di apertura e un'integrazione migliorata con Jetpack Compose. La libreria è retrocompatibile fino ad Android 10 (API 29) tramite Support Library e si adatta automaticamente alle capacità del dispositivo.

FoldingFeature: lavorare con la piega del dispositivo

FoldingFeature è la classe centrale di Jetpack WindowManager per lavorare con dispositivi pieghevoli. Incapsula tutte le informazioni sulla posizione fisica della piega: stato (HALF_OPENED, FLAT, TABLE_TOP), orientamento (VERTICAL, HORIZONTAL), coordinate della cerniera e angolo di apertura in gradi.

Stati di FoldingFeature

La libreria definisce quattro stati di piega. STATE_FLAT — il dispositivo è completamente aperto, lo schermo è piatto. STATE_HALF_OPENED — il dispositivo è parzialmente piegato, lo schermo è a un angolo da 30 a 160 gradi. STATE_TABLE_TOP — il dispositivo è appoggiato su una superficie in posizione laptop. STATE_FULLY_OPENED — uno stato obsoleto, sostituito da FLAT nella versione 1.2.

Orientamento e coordinate della piega

La piega può essere verticale (VERTICAL_FOLD) o orizzontale (HORIZONTAL_FOLD). Bounds è un rettangolo che descrive l'area della piega nelle coordinate della finestra dell'applicazione. Lo sviluppatore utilizza questi dati per posizionare gli elementi dell'interfaccia sopra e sotto la piega, evitando la sovrapposizione del contenuto con l'area critica.

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

WindowMetrics è un'API per ottenere dimensioni precise della finestra dell'applicazione, disponibile da WindowManager 1.0. A differenza di Display#getSize, WindowMetrics tiene conto della modalità multi-finestra, DeX e della finestra a forma libera. Le metriche restituiscono currentWindowMetrics (dimensione corrente) e maximumWindowMetrics (dimensione massima possibile sul dispositivo).

WindowSizeClass è un classificatore apparso in WindowManager 1.1. Divide gli schermi in tre categorie: Compact (larghezza inferiore a 600dp — telefono), Medium (600–840dp — tablet in orientamento verticale) e Expanded (oltre 840dp — tablet in orizzontale). Questa classe semplifica il layout adattivo sostituendo decine di controlli di dimensione con un'unica classificazione.

WindowSizeClassLarghezza schermoDispositivo esempioLayout consigliato
Compact0–599dpPixel 8, Galaxy S24Pannello singolo, navigazione inferiore
Medium600–839dpPixel Fold (chiuso), iPad MiniElenco-dettaglio, navigazione laterale
Expanded840dp+Galaxy Z Fold (aperto), iPad ProMulti-pannello, guida di navigazione
kotlin
class MyComposable {
    @Composable
    fun AdaptiveLayout(windowSizeClass: WindowSizeClass) {
        when (windowSizeClass.widthSizeClass) {
            WindowWidthSizeClass.Compact -> CompactScreen()
            WindowWidthSizeClass.Expanded -> ExpandedScreen()
            else -> MediumScreen()
        }
    }
}

ScreenContinuityController e continuità dello schermo

ScreenContinuityController è un componente di WindowManager responsabile di preservare lo stato dell'Activity quando cambia la configurazione del dispositivo pieghevole. Quando l'utente apre o chiude il telefono, il controller notifica all'applicazione la nuova postura e fornisce meccanismi per una transizione fluida.

Il controller registra listener tramite registerContinuityListener, che accetta un callback con un oggetto FoldingFeature. A ogni cambio di postura, il callback viene attivato prima della ricreazione dell'Activity, dando allo sviluppatore l'opportunità di salvare manualmente lo stato. Se l'applicazione utilizza ViewModel, non è necessaria alcuna gestione aggiuntiva: i dati vengono salvati automaticamente.

ScreenContinuity in Jetpack Compose

Le applicazioni Compose beneficiano di ScreenContinuity tramite LocalWindowSizeClass e CompositionLocalProvider. I componenti si ricompongono automaticamente quando WindowMetrics cambiano. rememberSaveable preserva lo stato tra le ricomposizioni e Modifier.windowInsets tiene conto delle aree di sistema dello schermo.

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

Esempi di integrazione in Kotlin

Consideriamo un esempio completo di un'Activity che utilizza Jetpack WindowManager per adattare l'interfaccia a diverse posture di un dispositivo pieghevole. WindowManagerActivity si sottoscrive ai cambiamenti di FoldingFeature tramite l'API Flow e passa tra layout a pannello singolo e doppio pannello.

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'esempio mostra uno scenario di base: l'applicazione verifica WindowMetrics e seleziona un layout a pannello singolo o doppio pannello. Nei progetti reali, si consiglia di utilizzare WindowSizeClass per un adattamento più flessibile e FoldingFeature per gestire i dispositivi pieghevoli. La libreria supporta anche la transizione senza soluzione di continuità — animazione fluida durante il passaggio tra layout.

Test e debug di WindowManager

Android Studio include strumenti integrati per testare Jetpack WindowManager. L'emulatore supporta dispositivi pieghevoli (Pixel Fold, Galaxy Z Fold) con cambio di postura tramite la scheda Folding Postures. Layout Inspector mostra le WindowMetrics correnti e i confini di FoldingFeature in tempo reale.

Debug tramite ADB

Il comando adb shell dumpsys window displays mostra informazioni su tutti i display collegati e le loro configurazioni. Per simulare una piega, utilizzare adb shell am broadcast -a android.intent.action.SCREEN_ON con parametri di postura aggiuntivi. WindowManager registra tutte le modifiche di FoldingFeature tramite WindowManager#logState.

Errori comuni

I principali problemi di integrazione — ignorare gli aggiornamenti di WindowMetrics in modalità multi-finestra, gestione errata dei bounds con una piega verticale e mancanza di test su tutte le posture. Si consiglia di testare ogni postura separatamente e verificare il comportamento durante il passaggio dall'una all'altra. L'uso di WindowSizeClass invece di controlli manuali delle dimensioni riduce i bug del 60%.

Domande frequenti

Da quale versione di Android è disponibile Jetpack WindowManager?

Jetpack WindowManager è disponibile da Android 5.0 (API 21) tramite Jetpack AndroidX. Tuttavia, per il funzionamento di FoldingFeature e ScreenContinuityController, è necessario un dispositivo con Android 10+ (API 29) e una piega fisica. WindowMetrics funziona su tutte le versioni, ma la precisione dei dati dipende dal produttore.

In cosa WindowManager si differenzia dall'API Display?

L'API Display è obsoleta e non tiene conto dei dispositivi pieghevoli, delle modalità multi-finestra e DeX. WindowManager fornisce un'API unificata per tutti gli scenari: FoldingFeature per le pieghe, WindowMetrics per le dimensioni precise e WindowSizeClass per il layout adattivo. Display#getSize potrebbe restituire dati errati in multi-finestra.

In che modo WindowSizeClass aiuta nel layout adattivo?

WindowSizeClass sostituisce decine di controlli di larghezza dello schermo con tre categorie: Compact, Medium e Expanded. Invece di calcolare manualmente i dp e confrontare con soglie, lo sviluppatore sceglie un layout per una categoria specifica. Ciò semplifica il codice, riduce la probabilità di errori e accelera il supporto di nuovi dispositivi.

Devo aggiungere WindowManager a un progetto se non ci sono dispositivi pieghevoli?

Sì, WindowManager è utile anche per i telefoni normali. WindowMetrics funziona correttamente in modalità multi-finestra e quando si utilizza DeX. WindowSizeClass aiuta ad adattare l'interfaccia per tablet e schermi grandi. La libreria aggiunge solo 48 KB all'APK e non influisce sulle prestazioni.

Come testare WindowManager senza un dispositivo pieghevole?

Android Emulator con un AVD come Pixel Fold o Galaxy Z Fold simula completamente le operazioni di FoldingFeature. In Extended Controls, selezionare la scheda Folding Postures e cambiare le posture. È inoltre possibile utilizzare WindowManager Test Kit per test unitari con oggetti mock di FoldingFeature.

Riepilogo

  • Jetpack WindowManager è una libreria AndroidX per la gestione di finestre, dispositivi pieghevoli e layout adattivo.
  • FoldingFeature fornisce informazioni sulla postura della piega: HALF_OPENED, FLAT, TABLE_TOP con coordinate della cerniera.
  • WindowMetrics restituisce dimensioni precise della finestra, tenendo conto delle modalità multi-finestra e DeX.
  • WindowSizeClass classifica gli schermi in Compact, Medium e Expanded per semplificare il layout adattivo.
  • ScreenContinuityController garantisce la preservazione dello stato dell'Activity durante la chiusura e l'apertura del dispositivo.
  • Android Emulator supporta la simulazione di tutte le posture di piega per test senza dispositivo fisico.
  • Si consiglia di aggiungere WindowManager a tutti i progetti per un corretto funzionamento su tablet e dispositivi pieghevoli.

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche