Window Size Class — bu nədir, ölçü sinifləri və tərtibat

Müəllif: IT Sectr Dərc olunub: 2026-06-08 Oxuma vaxtı: 9 dəq

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 — pəncərə genişliyini Compact, Medium və Expanded-ə kateqoriyalaşdırmaq üçün API.
  • Compact — 600 dp-dək dar pəncərələr üçün sinif, telefonların portret rejimi üçün xarakterik.
  • Medium — 600–840 dp pəncərələr üçün sinif, planşetlərin portretdə və telefonların albomda olması üçün xarakterik.
  • Expanded — 840 dp-dən geniş pəncərələr üçün sinif, planşetlərdə və desktop-da rast gəlinir.
  • Material Design 3 Window Size Class-dan adaptive layout üçün əsas kimi istifadə edir.

Window Size Class nədir?

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.

Android pəncərə ölçüsünün üç sinifi

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 necə işləyir

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.

kotlin
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

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.

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

Window Size Class və Material Design 3

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.

SinifNavigation ComponentPane Scaffold
CompactBottom NavigationGizli panel
MediumNavigation RailAçılan panel
ExpandedNavigation DrawerDaimi panel

Adaptiv maketlərin üstünlükləri

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

Window Size Class Screen Size Buckets-dən nə ilə fərqlənir?

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-ı Android 6 və daha aşağı versiyalarda dəstəkləmək lazımdırmı?

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.

Window Size Class qatlanan cihazlarda necə işləyir?

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.

Window Size Class XML-də (Views) istifadə oluna bilərmi?

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.

WindowHeightSizeClass üçün hansı həddlər istifadə olunur?

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ə

  • Window Size Class — Jetpack WindowManager API-si pəncərə genişliyini Compact, Medium və Expanded-ə kateqoriyalaşdırmaq üçün.
  • Compact — 600 dp-dək, tək sütunlu interfeys, Bottom Navigation.
  • Medium — 600–840 dp, iki sütunlu interfeys, Navigation Rail.
  • Expanded — 840 dp-dən, çoxpanelli interfeys, Navigation Drawer.
  • Jetpack Compose — currentWindowAdaptiveInfo() funksiyası sinfi icra zamanı almaq üçün.
  • Material Design 3 — adaptiv komponentlər avtomatik olaraq Window Size Class-a reaksiya verir.
  • Yekun — Window Size Class ənənəvi breakpoints adaptasiyasını əvəz edir və interfeysləri bütün cihazlarda proqnozlaşdırıla bilən edir.

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.

Layihəni müzakirə et

Həm də oxuyun