Window Size Class — co to je, třídy velikostí a vývoj

Autor: IT Sectr Publikováno: 2026-06-08 Doba čtení: 9 min

Window Size Class je API z Jetpack WindowManager, které rozděluje okno aplikace do tří kategorií: Compact, Medium a Expanded. Místo kontroly fyzického rozlišení nebo hustoty pixelů třídy analyzují dostupnou šířku v dp — to dává předvídatelný výsledek na jakémkoli zařízení. Podle Android Developers Documentation (2025) se Window Size Class stal standardem pro adaptivní rozhraní v Jetpack Compose a View systému díky WindowManager.

Hlavní

  • Window Size Class — API pro kategorizaci šířky okna na Compact, Medium a Expanded.
  • Compact — třída pro úzká okna do 600 dp, typická pro telefony v režimu na výšku.
  • Medium — třída pro okna 600–840 dp, charakteristická pro tablety na výšku a telefony na šířku.
  • Expanded — třída pro široká okna od 840 dp, vyskytující se na tabletech a desktopu.
  • Material Design 3 používá Window Size Class jako základ pro adaptive layout.

Co je Window Size Class?

Window Size Class je API platformy Android, součást knihovny Jetpack WindowManager, která klasifikuje dostupný prostor okna aplikace do tří kategorií. Na rozdíl od tradičního přístupu s kvantifikátory zdrojů (small/large/xlarge) poskytuje Window Size Class diskrétní sadu hodnot, na které se může vývojář spolehnout při navrhování rozhraní.

API se objevilo v Android 7.0 Nougat jako součást podpory režimu více oken, ale aktivní zavádění začalo s Jetpack WindowManager 1.1 (2022). Google doporučuje Window Size Class jako hlavní nástroj pro vytváření adaptivních rozvržení místo kontroly šířky obrazovky pomocí Display.getSize().

Klasifikace je založena na šířce okna v dp, nikoli na fyzické velikosti nebo hustotě pixelů. To znamená, že dvě zařízení s různým rozlišením, ale stejnou šířkou v dp, obdrží stejnou třídu — rozhraní bude předvídatelně stejné.

Tři třídy velikosti oken Android

Compact — třída pro okna o šířce do 600 dp. Telefon v režimu na výšku, většina skládacích telefonů (Galaxy Z Flip) v zavřeném stavu. Rozhraní je postaveno v jednom sloupci, navigace pomocí Bottom Navigation.

Medium — třída pro okna o šířce 600–840 dp. Tablet na výšku, telefon na šířku, skládací zařízení v polootevřeném stavu. Rozhraní používá dva sloupce — například seznam vlevo a detaily vpravo. Navigation Rail nahrazuje Bottom Navigation.

Expanded — třída pro okna o šířce od 840 dp. Tablet na šířku, desktopové okno, skládací zařízení v rozloženém stavu. Rozhraní může používat tři a více panelů, Permanent Navigation Drawer, panely nástrojů.

V Material Design 3 jsou pro každou třídu definovány adaptivní komponenty: Navigation Rail pro Medium, Navigation Drawer pro Expanded, Bottom Navigation pro Compact. Vývojář nemusí vybírat breakpoints — jsou již nastaveny API.

Jak funguje Window Size Class

Window Size Class se vypočítává na základě aktuální šířky okna aplikace v dp s ohledem na systémové prvky — stavový řádek, navigační panel, rozdělení obrazovky v Split Screen. API reaguje na změnu konfigurace okna: otočení zařízení, vstup do režimu více oken, rozložení skládacího zařízení.

Pro získání třídy se používá třída WindowSizeClass z knihovny androidx.window. Vývojář se přihlásí k odběru Flow (Kotlin) nebo LiveData (Java), který automaticky aktualizuje třídu při každé změně velikosti okna — bez ručního zpracování onConfigurationChanged.

Klasifikace probíhá ve třech krocích. První — měření aktuální šířky okna v pixelech. Druhý — převod na dp pomocí DisplayMetrics.density. Třetí — porovnání získané hodnoty s prahy: méně než 600 dp — Compact, 600–840 — Medium, od 840 — Expanded.

kotlin
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass()

when (windowSizeClass.windowWidthSizeClass) {
    WindowWidthSizeClass.COMPACT -> // kompaktní šířka
    WindowWidthSizeClass.MEDIUM  -> // střední šířka
    WindowWidthSizeClass.EXPANDED -> // rozšířená šířka
}

Kromě šířky (windowWidthSizeClass) API poskytuje třídu pro výšku okna (windowHeightSizeClass) — užitečné pro orientaci na šířku a desktopová okna.

Window Size Class v Jetpack Compose

V Jetpack Compose se Window Size Class používá pomocí funkce currentWindowAdaptiveInfo(), která vrací WindowAdaptiveInfo s třídami šířky a výšky. Tato funkce bere v úvahu nejen velikost okna, ale také typ vstupu (klávesnice, myš, dotyk) — prostřednictvím WindowPosture a WindowLayoutInfo.

Typický scénář — přepínání mezi rozvrženími v závislosti na třídě. Například na Compact se zobrazuje BottomSheet s výběrem, na Medium — boční panel, na Expanded — trvalý Navigation Drawer.

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

V Material Design 3 se komponenty NavigationSuiteScaffold automaticky přizpůsobují Window Size Class — vývojář nemusí psát podmíněnou logiku.

Window Size Class a Material Design 3

Material Design 3 (Material You) je plně integrován s Window Size Class. Systém adaptive layout v Material 3 určuje, který navigační komponent použít v každé třídě: BottomNavigation pro Compact, NavigationRail pro Medium, NavigationDrawer pro Expanded.

Tato integrace funguje na úrovni Adaptive API, které kombinuje Window Size Class s dalšími signály — FoldState (skládací zařízení) a WindowPosture (poloha obrazovky). Adaptive API je k dispozici prostřednictvím knihovny material3-adaptive.

Material 3 poskytuje čtyři adaptivní komponenty vysoké úrovně: ListDetailPaneScaffold, SupportingPaneScaffold, NavigationSuiteScaffold a AdaptiveSheet. Každá z nich mění své chování v závislosti na Window Size Class bez další konfigurace.

TřídaNavigation ComponentPane Scaffold
CompactBottom NavigationSkrytý panel
MediumNavigation RailVysouvací panel
ExpandedNavigation DrawerTrvalý panel

Výhody adaptivních rozvržení

Použití Window Size Class poskytuje tři klíčové výhody v mobilním vývoji. První — předvídatelnost: místo stovek kombinací velikostí obrazovky pracuje vývojář se třemi třídami. To radikálně snižuje počet testovacích scénářů a chyb souvisejících s rozvržením.

Druhá — automatická adaptace na režim více oken. Když uživatel vstoupí do Split Screen, šířka okna se změní — Window Size Class se okamžitě přepočítá a rozhraní se přizpůsobí. Bez tohoto API zobrazuje aplikace na rozdělené obrazovce oříznutou verzi rozhraní pro telefon.

Třetí — konzistence s Material Design 3. Google zabudoval Window Size Class do systému adaptivních komponent, takže rozhraní postavená na Material 3 automaticky následují doporučení Google pro design velkých obrazovek bez další práce.

Často kladené otázky

Čím se Window Size Class liší od Screen Size Buckets?

Screen Size Buckets (small/large/xlarge) — zastaralý přístup Android 1.6–6.0 založený na fyzické velikosti obrazovky. Window Size Class se zaměřuje na dostupnou šířku okna v dp a funguje v reálném čase při změně velikosti okna.

Je nutné podporovat Window Size Class na Android 6 a nižších?

Window Size Class je k dispozici prostřednictvím Jetpack WindowManager na Android 7.0+ s backport knihovnou. Pro Android 6 a nižší — pouze Compact, protože multi-window chybí. Použijte fallback přes WindowMetrics.

Jak funguje Window Size Class na skládacích zařízeních?

Při rozložení zařízení se šířka okna změní a Window Size Class se automaticky přepočítá. Třída se může změnit z Compact na Expanded díky zvětšení dostupné oblasti.

Lze použít Window Size Class v XML (Views)?

Ano, prostřednictvím WindowManager v Activity nebo Fragment. Po získání WindowSizeClass použijte podmíněnou logiku pro přepínání mezi XML rozvrženími nebo změnu viditelnosti View.

Jaké prahy se používají pro WindowHeightSizeClass?

Pro výšku okna jsou prahy odlišné: Compact — do 480 dp, Medium — 480–900 dp, Expanded — od 900 dp. WindowHeightSizeClass je užitečný v orientaci na šířku a na desktopu.

Shrnutí

  • Window Size Class — API Jetpack WindowManager pro kategorizaci šířky okna na Compact, Medium a Expanded.
  • Compact — do 600 dp, rozhraní s jedním sloupcem, Bottom Navigation.
  • Medium — 600–840 dp, rozhraní se dvěma sloupci, Navigation Rail.
  • Expanded — od 840 dp, rozhraní s více panely, Navigation Drawer.
  • Jetpack Compose — funkce currentWindowAdaptiveInfo() pro získání třídy za běhu.
  • Material Design 3 — adaptivní komponenty automaticky reagují na Window Size Class.
  • Závěr — Window Size Class nahrazuje tradiční adaptaci na breakpoints a činí rozhraní předvídatelnými na všech zařízeních.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také