Window Size Class — mi ez, méretosztályok és fejlesztés

Szerző: IT Sectr Megjelenés: 2026-06-08 Olvasási idő: 9 perc

A Window Size Class egy API a Jetpack WindowManager-ből, amely az alkalmazásablakot három kategóriába osztja: Compact, Medium és Expanded. A fizikai felbontás vagy pixelsűrűség ellenőrzése helyett az osztályok a rendelkezésre álló szélességet elemzik dp-ben — ez kiszámítható eredményt ad bármely eszközön. A Android Developers Documentation (2025) szerint a Window Size Class szabvánnyá vált az adaptív felületek számára a Jetpack Compose-ban és a View rendszerben a WindowManager-nek köszönhetően.

Főbb pontok

  • Window Size Class — API az ablak szélességének kategorizálására Compact, Medium és Expanded kategóriákba.
  • Compact — osztály keskeny ablakokhoz 600 dp-ig, jellemző a telefonokra portré módban.
  • Medium — osztály 600–840 dp ablakokhoz, jellemző a táblagépekre portréban és telefonokra fekvő módban.
  • Expanded — osztály széles ablakokhoz 840 dp-től, tableteken és asztali gépeken előforduló.
  • Material Design 3 a Window Size Class-t használja az adaptive layout alapjaként.

Mi az a Window Size Class?

Window Size Class egy API az Android platformon, része a Jetpack WindowManager könyvtárnak, amely az alkalmazásablak rendelkezésre álló terét három kategóriába sorolja. Az erőforrás-kvantifikátorokkal (small/large/xlarge) való hagyományos megközelítéssel ellentétben a Window Size Class diszkrét értékkészletet biztosít, amelyre a fejlesztő támaszkodhat a felület tervezésekor.

Az API az Android 7.0 Nougat-ban jelent meg a többablakos mód támogatásának részeként, de az aktív bevezetés a Jetpack WindowManager 1.1-gyel (2022) kezdődött. A Google a Window Size Class-t ajánlja fő eszközként az adaptív elrendezések építéséhez a képernyőszélesség Display.getSize()-on keresztüli ellenőrzése helyett.

Az osztályozás az ablak dp-ben mért szélességén alapul, nem a fizikai méreten vagy pixelsűrűségen. Ez azt jelenti, hogy két különböző felbontású, de azonos dp szélességű eszköz ugyanazt az osztályt kapja — a felület kiszámíthatóan azonos lesz.

Az Android ablakméret három osztálya

Compact — osztály a legfeljebb 600 dp szélességű ablakokhoz. Telefon portré módban, a legtöbb összecsukható telefon (Galaxy Z Flip) zárt állapotban. A felület egy oszlopba épül, navigáció a Bottom Navigation segítségével.

Medium — osztály a 600–840 dp szélességű ablakokhoz. Táblagép portréban, telefon fekvő módban, összecsukható eszköz félig nyitott állapotban. A felület két oszlopot használ — például lista balra és részletek jobbra. A Navigation Rail felváltja a Bottom Navigation-t.

Expanded — osztály a 840 dp-től széles ablakokhoz. Táblagép fekvő módban, asztali ablak, összecsukható eszköz kinyitott állapotban. A felület három vagy több panelt, Permanent Navigation Drawer-t, eszközpanelt használhat.

A Material Design 3-ban minden osztályhoz adaptív komponensek vannak meghatározva: Navigation Rail a Medium-hoz, Navigation Drawer az Expanded-hez, Bottom Navigation a Compact-hoz. A fejlesztőnek nem kell breakpoints-ot választania — azokat már az API beállította.

Hogyan működik a Window Size Class

A Window Size Class az alkalmazásablak aktuális szélessége alapján számítódik ki dp-ben, figyelembe véve a rendszerelemeket — állapotsor, navigációs panel, képernyőosztás Split Screen-ben. Az API az ablak konfigurációjának változására reagál: az eszköz elforgatása, többablakos módba lépés, összecsukható eszköz kinyitása.

Az osztály lekéréséhez a WindowSizeClass osztályt használjuk a androidx.window könyvtárból. A fejlesztő feliratkozik a Flow-ra (Kotlin) vagy LiveData-ra (Java), amely automatikusan frissíti az osztályt minden ablkméret-változáskor — az onConfigurationChanged kézi kezelése nélkül.

Az osztályozás három lépésben történik. Első — az ablak aktuális szélességének mérése pixelekben. Második — konvertálás dp-be a DisplayMetrics.density segítségével. Harmadik — a kapott érték összehasonlítása a küszöbértékekkel: kevesebb mint 600 dp — Compact, 600–840 — Medium, 840-től — Expanded.

kotlin
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass()

when (windowSizeClass.windowWidthSizeClass) {
    WindowWidthSizeClass.COMPACT -> // kompakt szélesség
    WindowWidthSizeClass.MEDIUM  -> // közepes szélesség
    WindowWidthSizeClass.EXPANDED -> // kiterjesztett szélesség
}

A szélességen (windowWidthSizeClass) kívül az API osztályt biztosít az ablak magasságához is (windowHeightSizeClass) — hasznos fekvő tájoláshoz és asztali ablakokhoz.

Window Size Class Jetpack Compose-ban

A Jetpack Compose-ban a Window Size Class a currentWindowAdaptiveInfo() függvényen keresztül használatos, amely WindowAdaptiveInfo-t ad vissza szélességi és magassági osztályokkal. Ez a függvény nemcsak az ablakméretet, hanem a bevitel típusát is figyelembe veszi (billentyűzet, egér, érintés) — a WindowPosture és WindowLayoutInfo segítségével.

Tipikus forgatókönyv — váltás az elrendezések között az osztálytól függően. Például Compact-on egy BottomSheet jelenik meg választással, Medium-on — egy oldalsó panel, Expanded-en — egy állandó Navigation Drawer.

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

A Material Design 3-ban a NavigationSuiteScaffold komponensek automatikusan alkalmazkodnak a Window Size Class-hoz — a fejlesztőnek nem kell feltételes logikát írnia.

Window Size Class és Material Design 3

Material Design 3 (Material You) teljesen integrált a Window Size Class-szal. Az adaptive layout rendszer a Material 3-ban meghatározza, hogy melyik navigációs komponenst kell használni az egyes osztályokban: BottomNavigation a Compact-hoz, NavigationRail a Medium-hoz, NavigationDrawer az Expanded-hez.

Ez az integráció az Adaptive API szintjén működik, amely a Window Size Class-t más jelekkel kombinálja — FoldState (összecsukható eszköz) és WindowPosture (képernyő helyzete). Az Adaptive API a material3-adaptive könyvtáron keresztül érhető el.

A Material 3 négy magas szintű adaptív komponenst kínál: ListDetailPaneScaffold, SupportingPaneScaffold, NavigationSuiteScaffold és AdaptiveSheet. Mindegyikük megváltoztatja viselkedését a Window Size Class-tól függően, további konfiguráció nélkül.

OsztályNavigation ComponentPane Scaffold
CompactBottom NavigationRejtett panel
MediumNavigation RailKihúzható panel
ExpandedNavigation DrawerÁllandó panel

Az adaptív elrendezések előnyei

A Window Size Class használata három kulcsfontosságú előnyt nyújt a mobilfejlesztésben. Első — kiszámíthatóság: képernyőméretek százai helyett a fejlesztő három osztállyal dolgozik. Ez drasztikusan csökkenti a tesztforgatókönyvek és az elrendezéssel kapcsolatos hibák számát.

Második — automatikus alkalmazkodás a többablakos módhoz. Amikor a felhasználó belép a Split Screen-be, az ablak szélessége megváltozik — a Window Size Class azonnal újraszámítódik, és a felület alkalmazkodik. Ezen API nélkül az alkalmazás osztott képernyőn a telefonfelület csonka változatát mutatja.

Harmadik — konzisztencia a Material Design 3-mal. A Google beépítette a Window Size Class-t az adaptív komponensek rendszerébe, így a Material 3-ra épülő felületek automatikusan követik a Google nagy képernyős tervezési ajánlásait, további munka nélkül.

Gyakran Ismételt Kérdések

Miben különbözik a Window Size Class a Screen Size Buckets-től?

Screen Size Buckets (small/large/xlarge) — az Android 1.6–6.0 elavult megközelítése, a képernyő fizikai méretén alapul. A Window Size Class az ablak rendelkezésre álló szélességére összpontosít dp-ben, és valós időben működik az ablakméret változásakor.

Szükséges támogatni a Window Size Class-t Android 6 és régebbi verziókon?

A Window Size Class a Jetpack WindowManager-en keresztül érhető el Android 7.0+-on backport könyvtárral. Android 6 és régebbi verziókhoz — csak Compact, mivel a multi-window hiányzik. Használjon fallback-et a WindowMetrics segítségével.

Hogyan működik a Window Size Class összecsukható eszközökön?

Az eszköz kinyitásakor az ablak szélessége megváltozik, és a Window Size Class automatikusan újraszámítódik. Az osztály Compact-ról Expanded-re változhat a rendelkezésre álló terület növekedése miatt.

Használható a Window Size Class XML-ben (Views)?

Igen, a WindowManager-en keresztül Activity-ben vagy Fragment-ben. A WindowSizeClass megszerzése után használjon feltételes logikát az XML elrendezések közötti váltáshoz vagy a View láthatóságának megváltoztatásához.

Milyen küszöbértékeket használ a WindowHeightSizeClass?

Az ablak magasságához a küszöbértékek eltérőek: Compact — 480 dp-ig, Medium — 480–900 dp, Expanded — 900 dp-től. A WindowHeightSizeClass fekvő tájolásban és asztali gépen hasznos.

Összegzés

  • Window Size Class — Jetpack WindowManager API az ablak szélességének kategorizálására Compact, Medium és Expanded kategóriákba.
  • Compact — 600 dp-ig, egyoszlopos felület, Bottom Navigation.
  • Medium — 600–840 dp, kétoszlopos felület, Navigation Rail.
  • Expanded — 840 dp-től, többpaneles felület, Navigation Drawer.
  • Jetpack Compose — currentWindowAdaptiveInfo() függvény az osztály futásidőben történő lekéréséhez.
  • Material Design 3 — az adaptív komponensek automatikusan reagálnak a Window Size Class-ra.
  • Következtetés — A Window Size Class felváltja a hagyományos breakpoints-adaptációt, és kiszámíthatóvá teszi a felületeket minden eszközön.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is