Window Size Class — Jetpack WindowManager dan olingan API bo'lib, u ilova oynasini uch toifaga ajratadi: Compact, Medium va Expanded. Jismoniy ruxsatni yoki piksel zichligini tekshirish o'rniga, sinflar dp dagi mavjud kenglikni tahlil qiladi — bu har qanday qurilmada bashorat qilinadigan natija beradi. Android Developers Documentation (2025) ma'lumotlariga ko'ra, Window Size Class Jetpack Compose va View tizimida adaptiv interfeyslar uchun standartga aylandi, buning sababi WindowManager.
Asosiy
Window Size Class — Android platformasining API si, Jetpack WindowManager kutubxonasiga kiradi, ilova oynasining mavjud maydonini uch toifaga ajratadi. Resurs kvantifikatorlari (small/large/xlarge) bilan an'anaviy yondashuvdan farqli o'laroq, Window Size Class diskret qiymatlar to'plamini beradi, ishlab chiqaruvchi interfeysni loyihalashda ularga tayanadi.
API Android 7.0 Nougat da ko'p oynali rejimni qo'llab-quvvatlash uchun paydo bo'ldi, ammo faol joriy etish Jetpack WindowManager 1.1 (2022) bilan boshlandi. Google Window Size Class ni Display.getSize() orqali ekran kengligini tekshirish o'rniga adaptiv maketlar qurish uchun asosiy vosita sifatida tavsiya qiladi.
Tasnif jismoniy o'lcham yoki piksel zichligiga emas, balki dp dagi oyna kengligiga asoslanadi. Bu shuni anglatadiki, turli ruxsatga ega ikkita qurilma bir xil dp kengligida bir xil sinfni oladi — interfeys bashorat qilinadigan darajada bir xil bo'ladi.
Compact — 600 dp gacha kenglikdagi oynalar uchun sinf. Portret rejimidagi telefon, yig'iladigan telefonlarning (Galaxy Z Flip) aksariyati yopiq holatda. Interfeys bir ustunda quriladi, Bottom Navigation orqali navigatsiya.
Medium — 600–840 dp kenglikdagi oynalar uchun sinf. Portretdagi planshet, landshaftdagi telefon, yarim ochiq holatdagi yig'iladigan qurilma. Interfeys ikki ustundan foydalanadi — masalan, chapda ro'yxat va o'ngda tafsilotlar. Navigation Rail Bottom Navigation ni almashtiradi.
Expanded — 840 dp dan keng oynalar uchun sinf. Landshaftdagi planshet, desktop oynasi, ochilgan yig'iladigan qurilma. Interfeys uch yoki undan ko'p panel, Permanent Navigation Drawer, asboblar panellaridan foydalanishi mumkin.
Material Design 3 da har bir sinf uchun adaptiv komponentlar aniqlangan: Medium uchun Navigation Rail, Expanded uchun Navigation Drawer, Compact uchun Bottom Navigation. Ishlab chiqaruvchi breakpoints tanlashi shart emas — ular allaqachon API tomonidan belgilangan.
Window Size Class ilova oynasining joriy kengligiga asoslanib dp da hisoblanadi, tizim elementlari — holat paneli, navigatsiya paneli, Split Screen da ekran bo'linishi hisobga olinadi. API oyna konfiguratsiyasi o'zgarganda ishga tushadi: qurilmaning aylanishi, ko'p oynali rejimga kirish, yig'iladigan qurilmaning ochilishi.
Sinfni olish uchun androidx.window kutubxonasidan WindowSizeClass sinfi ishlatiladi. Ishlab chiqaruvchi Flow (Kotlin) yoki LiveData (Java) ga obuna bo'ladi, oyna o'lchami har safar o'zgarganda sinfni avtomatik yangilaydi — qo'lda onConfigurationChanged qayta ishlanmasdan.
Tasnif uch bosqichda amalga oshiriladi. Birinchi — piksellardagi joriy oyna kengligini o'lchash. Ikkinchi — DisplayMetrics.density orqali dp ga o'tkazish. Uchinchi — olingan qiymatni chegaralar bilan solishtirish: 600 dp dan kam — Compact, 600–840 — Medium, 840 dan — Expanded.
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass()
when (windowSizeClass.windowWidthSizeClass) {
WindowWidthSizeClass.COMPACT -> // ixcham kenglik
WindowWidthSizeClass.MEDIUM -> // o‘rta kenglik
WindowWidthSizeClass.EXPANDED -> // kengaytirilgan kenglik
}
Kenglikdan tashqari (windowWidthSizeClass), API oyna balandligi sinfini ham ta'minlaydi (windowHeightSizeClass) — landshaft orientatsiyasi va desktop oynalari uchun foydali.
Jetpack Compose da Window Size Class currentWindowAdaptiveInfo() funksiyasi orqali ishlatiladi, bu kenglik va balandlik sinflari bilan WindowAdaptiveInfo qaytaradi. Bu funksiya nafaqat oyna o'lchamini, balki kiritish turini (klaviatura, sichqoncha, sensor) — WindowPosture va WindowLayoutInfo orqali hisobga oladi.
Oddiy stsenariy — sinfga qarab layoutlar o'rtasida almashish. Masalan, Compact da tanlov bilan BottomSheet ko'rsatiladi, Medium da — yon panel, Expanded da — doimiy Navigation Drawer.
@Composable
fun AdaptiveNavigation(windowSizeClass: WindowWidthSizeClass) {
when (windowSizeClass) {
WindowWidthSizeClass.COMPACT -> BottomNavigation()
WindowWidthSizeClass.MEDIUM -> NavigationRail()
WindowWidthSizeClass.EXPANDED -> NavigationDrawer()
}
}
Material Design 3 da NavigationSuiteScaffold komponentlari avtomatik ravishda Window Size Class ga moslashadi — ishlab chiqaruvchi shartli mantiq yozishi shart emas.
Material Design 3 (Material You) Window Size Class bilan to'liq integratsiyalangan. Material 3 da adaptive layout tizimi har bir sinfda qaysi navigatsiya komponentidan foydalanishni aniqlaydi: Compact uchun BottomNavigation, Medium uchun NavigationRail, Expanded uchun NavigationDrawer.
Bu integratsiya Adaptive API darajasida ishlaydi, Window Size Class ni boshqa signallar bilan — FoldState (yig'iladigan qurilma) va WindowPosture (ekran holati) bilan birlashtiradi. Adaptive API material3-adaptive kutubxonasi orqali mavjud.
Material 3 to'rtta adaptiv yuqori darajali komponentni taqdim etadi: ListDetailPaneScaffold, SupportingPaneScaffold, NavigationSuiteScaffold va AdaptiveSheet. Ularning har biri qo'shimcha konfiguratsiyasiz Window Size Class ga qarab o'z xatti-harakatini o'zgartiradi.
| Sinf | Navigation Component | Pane Scaffold |
|---|---|---|
| Compact | Bottom Navigation | Yashirin panel |
| Medium | Navigation Rail | Suriladigan panel |
| Expanded | Navigation Drawer | Doimiy panel |
Window Size Class dan foydalanish mobil ishlab chiqishda uchta asosiy afzallik beradi. Birinchi — bashorat qilish: yuzlab ekran o'lchamlari kombinatsiyasi o'rniga ishlab chiqaruvchi uch sinf bilan ishlaydi. Bu test stsenariylari va layout bilan bog'liq xatolar sonini keskin kamaytiradi.
Ikkinchi — ko'p oynali rejimga avtomatik moslashish. Foydalanuvchi Split Screen ga kirganda oyna kengligi o'zgaradi — Window Size Class darhol qayta hisoblanadi va interfeys moslashadi. Bu API bo'lmasa, bo'lingan ekranda ilova telefon interfeysining qisqartirilgan versiyasini ko'rsatadi.
Uchinchi — Material Design 3 bilan muvofiqlik. Google Window Size Class ni adaptiv komponentlar tizimiga kiritgan, shuning uchun Material 3 da qurilgan interfeyslar qo'shimcha ishsiz avtomatik ravishda Google ning katta ekran dizayn tavsiyalariga amal qiladi.
Tez-tez so'raladigan savollar
Screen Size Buckets (small/large/xlarge) — Android 1.6–6.0 ning eskirgan yondashuvi, ekranning jismoniy o'lchamiga asoslangan. Window Size Class dp dagi mavjud oyna kengligiga asoslanadi va oyna o'lchami o'zgarganda real vaqtda ishlaydi.
Window Size Class Jetpack WindowManager orqali Android 7.0+ da backport kutubxonasi bilan mavjud. Android 6 va undan past uchun — faqat Compact, chunki multi-window yo'q. WindowMetrics orqali fallback dan foydalaning.
Qurilma ochilganda oyna kengligi o'zgaradi va Window Size Class avtomatik qayta hisoblanadi. Sinf Compact dan Expanded ga o'zgarishi mumkin, chunki mavjud maydon kengayadi.
Ha, Activity yoki Fragment da WindowManager orqali. WindowSizeClass ni olgandan so'ng XML layoutlar o'rtasida almashish yoki View ko'rinishini o'zgartirish uchun shartli mantiqdan foydalaning.
Oyna balandligi uchun chegaralar farq qiladi: Compact — 480 dp gacha, Medium — 480–900 dp, Expanded — 900 dp dan. WindowHeightSizeClass landshaft orientatsiyasi va desktop da foydali.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.
Shuningdek o'qing