Window Size Class — ce este, clase de dimensiuni și dezvoltare

Autor: IT Sectr Publicat: 2026-06-08 Timp de citire: 9 min

Window Size Class este o API din Jetpack WindowManager care împarte fereastra aplicației în trei categorii: Compact, Medium și Expanded. În loc să verifice rezoluția fizică sau densitatea pixelilor, clasele analizează lățimea disponibilă în dp — aceasta oferă un rezultat previzibil pe orice dispozitiv. Conform Android Developers Documentation (2025), Window Size Class a devenit standardul pentru interfețe adaptive în Jetpack Compose și sistemul View datorită WindowManager.

Principalul

  • Window Size Class — API pentru categorisirea lățimii ferestrei în Compact, Medium și Expanded.
  • Compact — clasa pentru ferestre înguste până la 600 dp, tipice pentru telefoane în modul portret.
  • Medium — clasa pentru ferestre 600–840 dp, caracteristice tabletelor în portret și telefoanelor în peisaj.
  • Expanded — clasa pentru ferestre late de la 840 dp, întâlnite pe tablete și desktop.
  • Material Design 3 utilizează Window Size Class ca bază pentru adaptive layout.

Ce este Window Size Class?

Window Size Class este o API a platformei Android, parte a bibliotecii Jetpack WindowManager, care clasifică spațiul disponibil al ferestrei aplicației în trei categorii. Spre deosebire de abordarea tradițională cu cuantificatori de resurse (small/large/xlarge), Window Size Class oferă un set discret de valori pe care dezvoltatorul se poate baza atunci când proiectează interfața.

API a apărut în Android 7.0 Nougat ca parte a suportului pentru modul multi-fereastră, dar implementarea activă a început cu Jetpack WindowManager 1.1 (2022). Google recomandă Window Size Class ca instrument principal pentru construirea layout-urilor adaptive în locul verificării lățimii ecranului prin Display.getSize().

Clasificarea se bazează pe lățimea ferestrei în dp, nu pe dimensiunea fizică sau densitatea pixelilor. Aceasta înseamnă că două dispozitive cu rezoluții diferite, dar aceeași lățime în dp vor primi aceeași clasă — interfața va fi previzibil identică.

Trei clase de dimensiuni ale ferestrei Android

Compact — clasa pentru ferestre cu lățimea de până la 600 dp. Telefon în modul portret, majoritatea telefoanelor pliabile (Galaxy Z Flip) în stare închisă. Interfața se construiește într-o singură coloană, navigare prin Bottom Navigation.

Medium — clasa pentru ferestre cu lățimea de 600–840 dp. Tabletă în portret, telefon în peisaj, dispozitiv pliabil în stare semi-deschisă. Interfața utilizează două coloane — de exemplu, lista în stânga și detaliile în dreapta. Navigation Rail înlocuiește Bottom Navigation.

Expanded — clasa pentru ferestre cu lățimea de la 840 dp. Tabletă în peisaj, fereastră desktop, dispozitiv pliabil în stare deschisă. Interfața poate utiliza trei sau mai multe panouri, Permanent Navigation Drawer, panouri de instrumente.

În Material Design 3 pentru fiecare clasă sunt definite componente adaptive: Navigation Rail pentru Medium, Navigation Drawer pentru Expanded, Bottom Navigation pentru Compact. Dezvoltatorul nu trebuie să selecteze breakpoints — acestea sunt deja stabilite de API.

Cum funcționează Window Size Class

Window Size Class se calculează pe baza lățimii curente a ferestrei aplicației în dp, ținând cont de elementele sistemului — bara de stare, panoul de navigare, împărțirea ecranului în Split Screen. API reacționează la modificarea configurației ferestrei: rotirea dispozitivului, intrarea în modul multi-fereastră, desfășurarea dispozitivului pliabil.

Pentru obținerea clasei se folosește clasa WindowSizeClass din biblioteca androidx.window. Dezvoltatorul se abonează la Flow (Kotlin) sau LiveData (Java), care actualizează automat clasa la fiecare modificare a dimensiunilor ferestrei — fără gestionarea manuală a onConfigurationChanged.

Clasificarea are loc în trei pași. Primul — măsurarea lățimii curente a ferestrei în pixeli. Al doilea — conversia în dp prin DisplayMetrics.density. Al treilea — compararea valorii obținute cu pragurile: mai puțin de 600 dp — Compact, 600–840 — Medium, de la 840 — Expanded.

kotlin
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass()

when (windowSizeClass.windowWidthSizeClass) {
    WindowWidthSizeClass.COMPACT -> // lățime compactă
    WindowWidthSizeClass.MEDIUM  -> // lățime medie
    WindowWidthSizeClass.EXPANDED -> // lățime extinsă
}

Pe lângă lățime (windowWidthSizeClass), API oferă o clasă pentru înălțimea ferestrei (windowHeightSizeClass) — utilă pentru orientarea peisaj și ferestrele desktop.

Window Size Class în Jetpack Compose

În Jetpack Compose Window Size Class este utilizat prin funcția currentWindowAdaptiveInfo(), care returnează WindowAdaptiveInfo cu clasele de lățime și înălțime. Această funcție ia în considerare nu doar dimensiunea ferestrei, ci și tipul de intrare (tastatură, mouse, tactil) — prin WindowPosture și WindowLayoutInfo.

Scenariul tipic — comutarea între layout-uri în funcție de clasă. De exemplu, pe Compact se afișează un BottomSheet cu selecție, pe Medium — un panou lateral, pe Expanded — un Navigation Drawer permanent.

kotlin
@Composable
fun AdaptiveNavigation(windowSizeClass: WindowWidthSizeClass) {
    when (windowSizeClass) {
        WindowWidthSizeClass.COMPACT -> BottomNavigation()
        WindowWidthSizeClass.MEDIUM  -> NavigationRail()
        WindowWidthSizeClass.EXPANDED -> NavigationDrawer()
    }
}

În Material Design 3 componentele NavigationSuiteScaffold se adaptează automat la Window Size Class — dezvoltatorul nu trebuie să scrie logică condițională.

Window Size Class și Material Design 3

Material Design 3 (Material You) este complet integrat cu Window Size Class. Sistemul adaptive layout din Material 3 determină ce componentă de navigare să fie utilizată pentru fiecare clasă: BottomNavigation pentru Compact, NavigationRail pentru Medium, NavigationDrawer pentru Expanded.

Această integrare funcționează la nivelul Adaptive API, care combină Window Size Class cu alte semnale — FoldState (dispozitiv pliabil) și WindowPosture (poziția ecranului). Adaptive API este disponibil prin biblioteca material3-adaptive.

Material 3 oferă patru componente adaptive de nivel înalt: ListDetailPaneScaffold, SupportingPaneScaffold, NavigationSuiteScaffold și AdaptiveSheet. Fiecare dintre acestea își schimbă comportamentul în funcție de Window Size Class fără configurare suplimentară.

ClasăNavigation ComponentPane Scaffold
CompactBottom NavigationPanou ascuns
MediumNavigation RailPanou glisant
ExpandedNavigation DrawerPanou permanent

Avantajele layout-urilor adaptive

Utilizarea Window Size Class oferă trei avantaje cheie în dezvoltarea mobilă. Primul — previzibilitatea: în loc de sute de combinații de dimensiuni de ecran, dezvoltatorul lucrează cu trei clase. Aceasta reduce radical numărul de scenarii de testare și erorile legate de layout.

Al doilea — adaptarea automată la modul multi-fereastră. Când utilizatorul intră în Split Screen, lățimea ferestrei se modifică — Window Size Class se recalculează instantaneu, iar interfața se adaptează. Fără această API, aplicația pe ecranul divizat afișează o versiune redusă a interfeței de telefon.

Al treilea — consistența cu Material Design 3. Google a încorporat Window Size Class în sistemul de componente adaptive, astfel încât interfețele construite pe Material 3 urmează automat recomandările Google pentru designul pe ecrane mari, fără muncă suplimentară.

Întrebări frecvente

Cu ce se deosebește Window Size Class de Screen Size Buckets?

Screen Size Buckets (small/large/xlarge) — o abordare învechită din Android 1.6–6.0, bazată pe dimensiunea fizică a ecranului. Window Size Class se bazează pe lățimea disponibilă a ferestrei în dp și funcționează în timp real la modificarea dimensiunii ferestrei.

Este necesar să suportăm Window Size Class pe Android 6 și mai jos?

Window Size Class este disponibil prin Jetpack WindowManager pe Android 7.0+ cu biblioteca backport. Pentru Android 6 și mai jos — doar Compact, deoarece multi-window lipsește. Utilizați fallback prin WindowMetrics.

Cum funcționează Window Size Class pe dispozitivele pliabile?

La desfășurarea dispozitivului, lățimea ferestrei se modifică, iar Window Size Class se recalculează automat. Clasa se poate schimba de la Compact la Expanded datorită creșterii zonei disponibile.

Pot folosi Window Size Class în XML (Views)?

Da, prin WindowManager în Activity sau Fragment. După obținerea WindowSizeClass, utilizați logică condițională pentru a comuta între layout-urile XML sau a modifica vizibilitatea View.

Ce praguri sunt utilizate pentru WindowHeightSizeClass?

Pentru înălțimea ferestrei, pragurile sunt diferite: Compact — până la 480 dp, Medium — 480–900 dp, Expanded — de la 900 dp. WindowHeightSizeClass este util în orientarea peisaj și pe desktop.

Concluzii

  • Window Size Class — API Jetpack WindowManager pentru categorisirea lățimii ferestrei în Compact, Medium și Expanded.
  • Compact — până la 600 dp, interfață pe o coloană, Bottom Navigation.
  • Medium — 600–840 dp, interfață pe două coloane, Navigation Rail.
  • Expanded — de la 840 dp, interfață multi-panou, Navigation Drawer.
  • Jetpack Compose — funcția currentWindowAdaptiveInfo() pentru obținerea clasei în runtime.
  • Material Design 3 — componente adaptive reacționează automat la Window Size Class.
  • Concluzie — Window Size Class înlocuiește adaptarea tradițională pe breakpoints și face interfețele previzibile pe toate dispozitivele.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și