Window Size Class — bu nima, o'lcham sinflari va ishlab chiqish

Muallif: IT Sectr Nashr etilgan: 2026-06-08 O'qish vaqti: 9 daq

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 — oyna kengligini Compact, Medium va Expanded ga toifalash uchun API.
  • Compact — 600 dp gacha tor oynalar uchun sinf, telefonlarning portret rejimi uchun xos.
  • Medium — 600–840 dp oynalar uchun sinf, planshetlarning portretda va telefonlarning landshaftda bo'lishi uchun xos.
  • Expanded — 840 dp dan keng oynalar uchun sinf, planshetlar va desktop da uchraydi.
  • Material Design 3 Window Size Class dan adaptive layout uchun asos sifatida foydalanadi.

Window Size Class nima?

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.

Android oyna o'lchamining uch sinfi

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 qanday ishlaydi

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.

kotlin
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

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.

kotlin
@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.

Window Size Class va Material Design 3

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.

SinfNavigation ComponentPane Scaffold
CompactBottom NavigationYashirin panel
MediumNavigation RailSuriladigan panel
ExpandedNavigation DrawerDoimiy panel

Adaptiv maketlarning afzalliklari

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

Window Size Class Screen Size Buckets dan qanday farq qiladi?

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 ni Android 6 va undan pastda qo'llab-quvvatlash kerakmi?

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.

Window Size Class yig'iladigan qurilmalarda qanday ishlaydi?

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.

Window Size Class ni XML da (Views) ishlatish mumkinmi?

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.

WindowHeightSizeClass uchun qanday chegaralar ishlatiladi?

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

  • Window Size Class — Jetpack WindowManager API si oyna kengligini Compact, Medium va Expanded ga toifalash uchun.
  • Compact — 600 dp gacha, bir ustunli interfeys, Bottom Navigation.
  • Medium — 600–840 dp, ikki ustunli interfeys, Navigation Rail.
  • Expanded — 840 dp dan, ko'p panelli interfeys, Navigation Drawer.
  • Jetpack Compose — currentWindowAdaptiveInfo() funksiyasi sinfni ish vaqtida olish uchun.
  • Material Design 3 — adaptiv komponentlar avtomatik ravishda Window Size Class ga reaksiya qiladi.
  • Xulosa — Window Size Class an'anaviy breakpoints moslashuvini almashtiradi va interfeyslarni barcha qurilmalarda bashorat qilinadigan qiladi.

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.

Loyihani muhokama qilish

Shuningdek o'qing