Window Size Class — Jetpack WindowManager-dən olan API-dir, proqram pəncərəsini üç kateqoriyaya bölür: Compact, Medium və Expanded. Fiziki qətnaməni və ya piksel sıxlığını yoxlamaq əvəzinə, siniflər dp-də mövcud genişliyi təhlil edir — bu istənilən cihazda proqnozlaşdırıla bilən nəticə verir. Android Developers Documentation (2025)-ə görə, Window Size Class Jetpack Compose və View-sistemində adaptiv interfeyslər üçün standart halına gəlib WindowManager sayəsində.
Əsas
Window Size Class — Android platformasının API-si, Jetpack WindowManager kitabxanasına daxildir, proqram pəncərəsinin mövcud sahəsini üç kateqoriyaya ayırır. Resurs kvantifikatorları (small/large/xlarge) ilə ənənəvi yanaşmadan fərqli olaraq, Window Size Class diskret dəyərlər dəsti verir ki, tərtibatçı interfeysi layihələndirərkən onlara əsaslana bilər.
API Android 7.0 Nougat-da çoxpəncərəli rejimi dəstəkləmək üçün ortaya çıxdı, lakin aktiv tətbiq Jetpack WindowManager 1.1 (2022) ilə başladı. Google Window Size Class-ı Display.getSize() vasitəsilə ekran genişliyini yoxlamaq əvəzinə adaptiv maketlər qurmaq üçün əsas alət kimi tövsiyə edir.
Təsnifat fiziki ölçü və ya piksel sıxlığına deyil, dp-də pəncərə genişliyinə əsaslanır. Bu o deməkdir ki, fərqli qətnaməyə malik iki cihaz eyni dp genişliyində eyni sinifi alacaq — interfeys proqnozlaşdırıla bilən şəkildə eyni olacaq.
Compact — 600 dp-dək genişlikdə pəncərələr üçün sinif. Portret rejimində telefon, qatlanan telefonların (Galaxy Z Flip) çoxu qapalı vəziyyətdə. Interfeys bir sütunda qurulur, Bottom Navigation ilə naviqasiya.
Medium — 600–840 dp genişlikdə pəncərələr üçün sinif. Portretdə planşet, albomda telefon, yarıaçıq vəziyyətdə qatlanan cihaz. Interfeys iki sütundan istifadə edir — məsələn, solda siyahı və sağda təfərrüatlar. Navigation Rail Bottom Navigation-ı əvəz edir.
Expanded — 840 dp-dən geniş pəncərələr üçün sinif. Albomda planşet, desktop pəncərəsi, açılmış qatlanan cihaz. Interfeys üç və daha çox panel, Permanent Navigation Drawer, alət panellərindən istifadə edə bilər.
Material Design 3-də hər sinif üçün adaptiv komponentlər müəyyən edilib: Medium üçün Navigation Rail, Expanded üçün Navigation Drawer, Compact üçün Bottom Navigation. Tərtibatçı breakpoints seçməli deyil — onlar artıq API tərəfindən təyin olunub.
Window Size Class proqram pəncərəsinin cari genişliyinə əsasən dp-də hesablanır, sistem elementləri — status zolağı, naviqasiya paneli, Split Screen-də ekran bölgüsü nəzərə alınmaqla. API pəncərə konfiqurasiyası dəyişdikdə işə düşür: cihazın fırlanması, çoxpəncərəli rejimə giriş, qatlanan cihazın açılması.
Sinifi əldə etmək üçün androidx.window kitabxanasından WindowSizeClass sinfi istifadə olunur. Tərtibatçı Flow (Kotlin) və ya LiveData (Java) abunə olur, pəncərə ölçüsü hər dəfə dəyişdikdə sinfi avtomatik yeniləyir — əl ilə onConfigurationChanged emalı olmadan.
Təsnifat üç addımda baş verir. Birinci — piksellərdə cari pəncərə genişliyinin ölçülməsi. İkinci — DisplayMetrics.density vasitəsilə dp-ə çevrilmə. Üçüncü — alınan dəyərin həddlərlə müqayisəsi: 600 dp-dən az — Compact, 600–840 — Medium, 840-dən — Expanded.
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass()
when (windowSizeClass.windowWidthSizeClass) {
WindowWidthSizeClass.COMPACT -> // kompakt genişlik
WindowWidthSizeClass.MEDIUM -> // orta genişlik
WindowWidthSizeClass.EXPANDED -> // genişləndirilmiş genişlik
}
Genişlikdən əlavə (windowWidthSizeClass), API pəncərə hündürlüyü sinfini də təmin edir (windowHeightSizeClass) — albom oriyentasiyası və desktop pəncərələri üçün faydalıdır.
Jetpack Compose-da Window Size Class currentWindowAdaptiveInfo() funksiyası vasitəsilə istifadə olunur, bu genişlik və hündürlük sinifləri ilə WindowAdaptiveInfo qaytarır. Bu funksiya təkcə pəncərə ölçüsünü deyil, həm də giriş növünü (klaviatura, siçan, toxunma) — WindowPosture və WindowLayoutInfo vasitəsilə nəzərə alır.
Tipik ssenari — sinifdən asılı olaraq layoutlar arasında keçid. Məsələn, Compact-da seçimlə BottomSheet göstərilir, Medium-da — yan panel, Expanded-da — daimi Navigation Drawer.
@Composable
fun AdaptiveNavigation(windowSizeClass: WindowWidthSizeClass) {
when (windowSizeClass) {
WindowWidthSizeClass.COMPACT -> BottomNavigation()
WindowWidthSizeClass.MEDIUM -> NavigationRail()
WindowWidthSizeClass.EXPANDED -> NavigationDrawer()
}
}
Material Design 3-də NavigationSuiteScaffold komponentləri avtomatik olaraq Window Size Class-a uyğunlaşır — tərtibatçı şərti məntiq yazmalı deyil.
Material Design 3 (Material You) Window Size Class ilə tam inteqrasiya olunub. Material 3-də adaptive layout sistemi hər sinifdə hansı naviqasiya komponentinin istifadə olunacağını müəyyən edir: Compact üçün BottomNavigation, Medium üçün NavigationRail, Expanded üçün NavigationDrawer.
Bu inteqrasiya Adaptive API səviyyəsində işləyir, Window Size Class-ı digər siqnallarla — FoldState (qatlanan cihaz) və WindowPosture (ekran mövqeyi) ilə birləşdirir. Adaptive API material3-adaptive kitabxanası vasitəsilə əlçatandır.
Material 3 dörd adaptiv yüksək səviyyəli komponent təqdim edir: ListDetailPaneScaffold, SupportingPaneScaffold, NavigationSuiteScaffold və AdaptiveSheet. Onların hər biri əlavə konfiqurasiya olmadan Window Size Class-dan asılı olaraq davranışını dəyişir.
| Sinif | Navigation Component | Pane Scaffold |
|---|---|---|
| Compact | Bottom Navigation | Gizli panel |
| Medium | Navigation Rail | Açılan panel |
| Expanded | Navigation Drawer | Daimi panel |
Window Size Class-dan istifadə mobil inkişafda üç əsas üstünlük verir. Birinci — proqnozlaşdırıla bilənlik: yüzlərlə ekran ölçüsü kombinasiyası əvəzinə tərtibatçı üç siniflə işləyir. Bu test ssenarilərinin və layoutla bağlı səhvlərin sayını kəskin azaldır.
İkinci — çoxpəncərəli rejimə avtomatik uyğunlaşma. İstifadəçi Split Screen-ə daxil olduqda pəncərə genişliyi dəyişir — Window Size Class dərhal yenidən hesablanır və interfeys uyğunlaşır. Bu API olmadan bölünmüş ekranda proqram telefon interfeysinin qısaldılmış versiyasını göstərir.
Üçüncü — Material Design 3 ilə uyğunluq. Google Window Size Class-ı adaptiv komponentlər sisteminə daxil edib, buna görə Material 3 üzərində qurulmuş interfeyslər əlavə iş olmadan avtomatik olaraq Google-un böyük ekran dizayn tövsiyələrinə əməl edir.
Tez-tez verilən suallar
Screen Size Buckets (small/large/xlarge) — Android 1.6–6.0-ın köhnəlmiş yanaşması, ekranın fiziki ölçüsünə əsaslanır. Window Size Class dp-də mövcud pəncərə genişliyinə əsaslanır və pəncərə ölçüsü dəyişdikdə real vaxtda işləyir.
Window Size Class Jetpack WindowManager vasitəsilə Android 7.0+-da backport kitabxanası ilə əlçatandır. Android 6 və daha aşağı üçün — yalnız Compact, çünki multi-window yoxdur. WindowMetrics vasitəsilə fallback istifadə edin.
Cihaz açıldıqda pəncərə genişliyi dəyişir və Window Size Class avtomatik yenidən hesablanır. Sinif Compact-dan Expanded-ə dəyişə bilər, çünki əlçatan sahə artır.
Bəli, Activity və ya Fragment-də WindowManager vasitəsilə. WindowSizeClass əldə etdikdən sonra XML layoutları arasında keçid etmək və ya View görünməsini dəyişmək üçün şərti məntiq istifadə edin.
Pəncərə hündürlüyü üçün həddlər fərqlidir: Compact — 480 dp-dək, Medium — 480–900 dp, Expanded — 900 dp-dən. WindowHeightSizeClass albom oriyentasiyası və desktop-da faydalıdır.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun