Window Size Class је API из Jetpack WindowManager-а који дели прозор апликације на три категорије: Compact, Medium и Expanded. Уместо провере физичке резолуције или густине пиксела, класе анализирају доступну ширину у dp — ово даје предвидљив резултат на било ком уређају. Према Android Developers Documentation (2025), Window Size Class је постао стандард за адаптивне интерфејсе у Jetpack Compose и View систему захваљујући WindowManager-у.
Главно
Window Size Class је API платформе Android, део библиотеке Jetpack WindowManager, који класификује доступни простор прозора апликације у три категорије. За разлику од традиционалног приступа са квантификаторима ресурса (small/large/xlarge), Window Size Class пружа дискретни скуп вредности на које се програмер може ослонити при пројектовању интерфејса.
API се појавио у Android 7.0 Nougat као део подршке за режим више прозора, али активно увођење је почело са Jetpack WindowManager 1.1 (2022). Google препоручује Window Size Class као главни алат за изградњу адаптивних распореда уместо провере ширине екрана кроз Display.getSize().
Класификација се заснива на ширини прозора у dp, а не на физичкој величини или густини пиксела. То значи да ће два уређаја са различитом резолуцијом, али истом ширином у dp добити исту класу — интерфејс ће бити предвидљиво исти.
Compact — класа за прозоре ширине до 600 dp. Телефон у портретном режиму, већина склопивих телефона (Galaxy Z Flip) у затвореном стању. Интерфејс се гради у једној колони, навигација преко Bottom Navigation.
Medium — класа за прозоре ширине 600–840 dp. Таблет у портрету, телефон у пејзажу, склопиви уређај у полуотвореном стању. Интерфејс користи две колоне — на пример, листа лево и детаљи десно. Navigation Rail замењује Bottom Navigation.
Expanded — класа за прозоре ширине од 840 dp. Таблет у пејзажу, десктоп прозор, склопиви уређај у расклопљеном стању. Интерфејс може користити три или више панела, Permanent Navigation Drawer, панеле алата.
У Material Design 3 за сваку класу су дефинисани адаптивни компоненти: Navigation Rail за Medium, Navigation Drawer за Expanded, Bottom Navigation за Compact. Програмер не мора да бира breakpoints — они су већ постављени API-јем.
Window Size Class се израчунава на основу тренутне ширине прозора апликације у dp, узимајући у обзир системске елементе — статусну траку, навигациони панел, поделу екрана у Split Screen-у. API реагује на промену конфигурације прозора: ротацију уређаја, улазак у режим више прозора, расклапање склопивог уређаја.
За добијање класе користи се класа WindowSizeClass из библиотеке androidx.window. Програмер се претплаћује на Flow (Kotlin) или LiveData (Java), који аутоматски ажурира класу при свакој промени величине прозора — без ручне обраде onConfigurationChanged.
Класификација се одвија у три корака. Први — мерење тренутне ширине прозора у пикселима. Други — конверзија у dp преко DisplayMetrics.density. Трећи — поређење добијене вредности са границама: мање од 600 dp — Compact, 600–840 — Medium, од 840 — Expanded.
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass()
when (windowSizeClass.windowWidthSizeClass) {
WindowWidthSizeClass.COMPACT -> // компактна ширина
WindowWidthSizeClass.MEDIUM -> // средња ширина
WindowWidthSizeClass.EXPANDED -> // проширена ширина
}
Поред ширине (windowWidthSizeClass), API пружа класу за висину прозора (windowHeightSizeClass) — корисну за пејзажну оријентацију и десктоп прозоре.
У Jetpack Compose Window Size Class се користи кроз функцију currentWindowAdaptiveInfo(), која враћа WindowAdaptiveInfo са класама ширине и висине. Ова функција узима у обзир не само величину прозора, већ и тип уноса (тастатура, миш, додир) — кроз WindowPosture и WindowLayoutInfo.
Типичан сценарио — пребацивање између распореда у зависности од класе. На пример, на Compact се приказује BottomSheet са избором, на Medium — бочни панел, на Expanded — стални Navigation Drawer.
@Composable
fun AdaptiveNavigation(windowSizeClass: WindowWidthSizeClass) {
when (windowSizeClass) {
WindowWidthSizeClass.COMPACT -> BottomNavigation()
WindowWidthSizeClass.MEDIUM -> NavigationRail()
WindowWidthSizeClass.EXPANDED -> NavigationDrawer()
}
}
У Material Design 3 компоненте NavigationSuiteScaffold се аутоматски прилагођавају Window Size Class-у — програмер не мора да пише условну логику.
Material Design 3 (Material You) је потпуно интегрисан са Window Size Class-ом. Систем adaptive layout-а у Material 3 одређује који навигациони компонент користити у свакој класи: BottomNavigation за Compact, NavigationRail за Medium, NavigationDrawer за Expanded.
Ова интеграција ради на нивоу Adaptive API-ја, који комбинује Window Size Class са другим сигналима — FoldState (склопиви уређај) и WindowPosture (положај екрана). Adaptive API је доступан кроз библиотеку material3-adaptive.
Material 3 пружа четири адаптивна компонента високог нивоа: ListDetailPaneScaffold, SupportingPaneScaffold, NavigationSuiteScaffold и AdaptiveSheet. Сваки од њих мења своје понашање у зависности од Window Size Class-а без додатне конфигурације.
| Класа | Navigation Component | Pane Scaffold |
|---|---|---|
| Compact | Bottom Navigation | Скривени панел |
| Medium | Navigation Rail | Извлачећи панел |
| Expanded | Navigation Drawer | Стални панел |
Коришћење Window Size Class-а даје три кључне предности у мобилном развоју. Прва — предвидљивост: уместо стотина комбинација величина екрана, програмер ради са три класе. Ово драстично смањује број тест сценарија и грешака везаних за распоред.
Друга — аутоматска адаптација на режим више прозора. Када корисник уђе у Split Screen, ширина прозора се мења — Window Size Class се тренутно прерачунава, а интерфејс се прилагођава. Без овог API-ја, апликација у подељеном екрану приказује смањену верзију интерфејса за телефон.
Трећа — конзистентност са Material Design 3. Google је уградио Window Size Class у систем адаптивних компонената, тако да интерфејси изграђени на Material 3 аутоматски прате препоруке Google-а за дизајн великих екрана без додатног рада.
Често постављана питања
Screen Size Buckets (small/large/xlarge) — застарели приступ Android 1.6–6.0 заснован на физичкој величини екрана. Window Size Class се оријентише на доступну ширину прозора у dp и ради у реалном времену при промени величине прозора.
Window Size Class је доступан кроз Jetpack WindowManager на Android 7.0+ са backport библиотеком. За Android 6 и старије — само Compact, јер multi-window не постоји. Користите fallback кроз WindowMetrics.
При расклапању уређаја, ширина прозора се мења и Window Size Class се аутоматски прерачунава. Класа се може променити са Compact на Expanded због повећања доступне површине.
Да, кроз WindowManager у Activity или Fragment-у. Након добијања WindowSizeClass-а, користите условну логику за пребацивање између XML распореда или промену видљивости View-а.
За висину прозора границе су другачије: Compact — до 480 dp, Medium — 480–900 dp, Expanded — од 900 dp. WindowHeightSizeClass је користан у пејзажној оријентацији и на десктопу.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође