Window Size Class — co to jest, klasy rozmiarów i tworzenie

Autor: IT Sectr Opublikowano: 2026-06-08 Czas czytania: 9 min

Window Size Class to API z Jetpack WindowManager, które dzieli okno aplikacji na trzy kategorie: Compact, Medium i Expanded. Zamiast sprawdzania fizycznej rozdzielczości lub gęstości pikseli, klasy analizują dostępną szerokość w dp — daje to przewidywalny wynik na każdym urządzeniu. Według Android Developers Documentation (2025), Window Size Class stał się standardem dla adaptacyjnych interfejsów w Jetpack Compose i systemie View dzięki WindowManager.

Najważniejsze

  • Window Size Class — API do kategoryzacji szerokości okna na Compact, Medium i Expanded.
  • Compact — klasa dla wąskich okien do 600 dp, typowych dla telefonów w trybie pionowym.
  • Medium — klasa dla okien 600–840 dp, charakterystycznych dla tabletów w pionie i telefonów w poziomie.
  • Expanded — klasa dla szerokich okien od 840 dp, występujących na tabletach i komputerach.
  • Material Design 3 wykorzystuje Window Size Class jako podstawę adaptive layout.

Czym jest Window Size Class?

Window Size Class to API platformy Android, wchodzące w skład biblioteki Jetpack WindowManager, które klasyfikuje dostępną przestrzeń okna aplikacji według trzech kategorii. W przeciwieństwie do tradycyjnego podejścia z kwantyfikatorami zasobów (small/large/xlarge), Window Size Class dostarcza dyskretny zestaw wartości, na których programista może się oprzeć podczas projektowania interfejsu.

API pojawiło się w Android 7.0 Nougat jako część obsługi trybu wielookienkowego, ale aktywne wdrażanie rozpoczęło się od Jetpack WindowManager 1.1 (2022). Google zaleca Window Size Class jako główne narzędzie do budowy adaptacyjnych układów zamiast sprawdzania szerokości ekranu przez Display.getSize().

Klasyfikacja opiera się na szerokości okna w dp, a nie na fizycznym rozmiarze lub gęstości pikseli. Oznacza to, że dwa urządzenia z różną rozdzielczością, ale taką samą szerokością w dp otrzymają tę samą klasę — interfejs będzie przewidywalnie taki sam.

Trzy klasy rozmiarów okna Android

Compact — klasa dla okien o szerokości do 600 dp. Telefon w trybie pionowym, większość składanych telefonów (Galaxy Z Flip) w złożonym stanie. Interfejs budowany w jednej kolumnie, nawigacja przez Bottom Navigation.

Medium — klasa dla okien o szerokości 600–840 dp. Tablet w pionie, telefon w poziomie, urządzenie składane w półotwartym stanie. Interfejs wykorzystuje dwie kolumny — na przykład lista po lewej i szczegóły po prawej. Navigation Rail zastępuje Bottom Navigation.

Expanded — klasa dla okien o szerokości od 840 dp. Tablet w poziomie, okno desktopowe, urządzenie składane w rozłożonym stanie. Interfejs może wykorzystywać trzy lub więcej paneli, Permanent Navigation Drawer, panele narzędziowe.

W Material Design 3 dla każdej klasy zdefiniowano adaptacyjne komponenty: Navigation Rail dla Medium, Navigation Drawer dla Expanded, Bottom Navigation dla Compact. Programista nie musi dobierać breakpoints — są już określone przez API.

Jak działa Window Size Class

Window Size Class jest obliczany na podstawie bieżącej szerokości okna aplikacji w dp z uwzględnieniem elementów systemowych — paska stanu, panelu nawigacji, podziału ekranu w Split Screen. API reaguje na zmiany konfiguracji okna: obrót urządzenia, wejście w tryb wielookienkowy, rozłożenie składanego urządzenia.

Do uzyskania klasy używana jest klasa WindowSizeClass z biblioteki androidx.window. Programista subskrybuje Flow (Kotlin) lub LiveData (Java), który automatycznie aktualizuje klasę przy każdej zmianie rozmiarów okna — bez ręcznej obsługi onConfigurationChanged.

Klasyfikacja odbywa się w trzech krokach. Pierwszy — pomiar bieżącej szerokości okna w pikselach. Drugi — konwersja na dp przez DisplayMetrics.density. Trzeci — porównanie uzyskanej wartości z progami: poniżej 600 dp — Compact, 600–840 — Medium, od 840 — Expanded.

kotlin
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass()

when (windowSizeClass.windowWidthSizeClass) {
    WindowWidthSizeClass.COMPACT -> // kompaktowa szerokość
    WindowWidthSizeClass.MEDIUM  -> // średnia szerokość
    WindowWidthSizeClass.EXPANDED -> // rozszerzona szerokość
}

Oprócz szerokości (windowWidthSizeClass), API udostępnia klasę dla wysokości okna (windowHeightSizeClass) — przydatną w orientacji poziomej i oknach desktopowych.

Window Size Class w Jetpack Compose

W Jetpack Compose Window Size Class jest używany przez funkcję currentWindowAdaptiveInfo(), która zwraca WindowAdaptiveInfo z klasami szerokości i wysokości. Funkcja ta uwzględnia nie tylko rozmiar okna, ale także typ wprowadzania (klawiatura, mysz, dotyk) — przez WindowPosture i WindowLayoutInfo.

Typowy scenariusz — przełączanie między układami w zależności od klasy. Na przykład w Compact wyświetlany jest BottomSheet z wyborem, w Medium — panel boczny, w Expanded — stały Navigation Drawer.

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

W Material Design 3 komponenty NavigationSuiteScaffold automatycznie dostosowują się do Window Size Class — programista nie musi pisać logiki warunkowej.

Window Size Class i Material Design 3

Material Design 3 (Material You) jest w pełni zintegrowany z Window Size Class. System adaptive layout w Material 3 określa, który komponent nawigacji użyć w każdej klasie: BottomNavigation dla Compact, NavigationRail dla Medium, NavigationDrawer dla Expanded.

Ta integracja działa na poziomie Adaptive API, który łączy Window Size Class z innymi sygnałami — FoldState (urządzenie składane) i WindowPosture (pozycja ekranu). Adaptive API jest dostępne przez bibliotekę material3-adaptive.

Material 3 udostępnia cztery adaptacyjne komponenty najwyższego poziomu: ListDetailPaneScaffold, SupportingPaneScaffold, NavigationSuiteScaffold i AdaptiveSheet. Każdy z nich zmienia swoje zachowanie w zależności od Window Size Class bez dodatkowej konfiguracji.

KlasaNavigation ComponentPane Scaffold
CompactBottom NavigationUkryty panel
MediumNavigation RailWysuwany panel
ExpandedNavigation DrawerStały panel

Zalety adaptacyjnych układów

Użycie Window Size Class daje trzy kluczowe zalety w programowaniu mobilnym. Pierwsza — przewidywalność: zamiast setek kombinacji rozmiarów ekranu programista pracuje z trzema klasami. To radykalnie zmniejsza liczbę scenariuszy testowych i błędów związanych z układem.

Druga — automatyczna adaptacja do trybu wielookienkowego. Gdy użytkownik wchodzi w Split Screen, szerokość okna zmienia się — Window Size Class natychmiast przelicza się, a interfejs dostosowuje. Bez tego API aplikacja w podzielonym ekranie pokazuje okrojoną wersję interfejsu dla telefonu.

Trzecia — spójność z Material Design 3. Google wbudował Window Size Class w system adaptacyjnych komponentów, więc interfejsy zbudowane na Material 3 automatycznie podążają za zaleceniami Google dotyczącymi projektowania na dużych ekranach bez dodatkowej pracy.

Często zadawane pytania

Czym Window Size Class różni się od Screen Size Buckets?

Screen Size Buckets (small/large/xlarge) — to przestarzałe podejście z Android 1.6–6.0, oparte na fizycznym rozmiarze ekranu. Window Size Class opiera się na dostępnej szerokości okna w dp i działa w czasie rzeczywistym przy zmianie rozmiaru okna.

Czy trzeba obsługiwać Window Size Class na Android 6 i starszych?

Window Size Class jest dostępny przez Jetpack WindowManager na Android 7.0+ z biblioteką backport. Dla Android 6 i starszych — tylko Compact, ponieważ multi-window nie występuje. Użyj fallback przez WindowMetrics.

Jak Window Size Class działa na składanych urządzeniach?

Przy rozkładaniu urządzenia szerokość okna zmienia się, a Window Size Class jest przeliczany automatycznie. Klasa może zmienić się z Compact na Expanded dzięki zwiększeniu dostępnego obszaru.

Czy można używać Window Size Class w XML (Views)?

Tak, przez WindowManager w Activity lub Fragment. Po uzyskaniu WindowSizeClass użyj logiki warunkowej do przełączania między układami XML lub zmiany widoczności View.

Jakie progi są używane dla WindowHeightSizeClass?

Dla wysokości okna progi są inne: Compact — do 480 dp, Medium — 480–900 dp, Expanded — od 900 dp. WindowHeightSizeClass jest przydatny w orientacji poziomej i na desktopie.

Podsumowanie

  • Window Size Class — API Jetpack WindowManager do kategoryzacji szerokości okna na Compact, Medium i Expanded.
  • Compact — do 600 dp, interfejs jedno kolumnowy, Bottom Navigation.
  • Medium — 600–840 dp, interfejs dwukolumnowy, Navigation Rail.
  • Expanded — od 840 dp, interfejs wielopanelowy, Navigation Drawer.
  • Jetpack Compose — funkcja currentWindowAdaptiveInfo() do uzyskania klasy w czasie wykonania.
  • Material Design 3 — adaptacyjne komponenty automatycznie reagują na Window Size Class.
  • Podsumowanie — Window Size Class zastępuje tradycyjną adaptację na breakpoints i sprawia, że interfejsy są przewidywalne na wszystkich urządzeniach.

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również