Jetpack WindowManager: bu nədir, qatlanan cihazlar üçün kitabxana

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

Jetpack WindowManager — dəyişən ekran konfiqurasiyası olan cihazlarda pəncərələri idarə etmək üçün Google-dan Android kitabxanası. O, qatlanan cihazlar, böyük ekranlar və multi-window rejimi ilə işləmək üçün API təqdim edir. Android Developers, 2025 məlumatlarına görə, kitabxana planşetlər üçün optimallaşdırılmış Google Play top-100 tətbiqlərinin 78%-də istifadə olunur. WindowManager FoldingFeature, WindowMetrics və ScreenContinuityController siniflərini əhatə edir və adaptiv düzülüşün bütün ssenarilərini qarşılayır.

Əsas məqamlar

  • Jetpack WindowManager — Android cihazlarında müxtəlif pəncərə konfiqurasiyaları ilə işləmək üçün rəsmi AndroidX kitabxanası.
  • FoldingFeature — cihazın qatlanmasının fiziki vəziyyətini təsvir edən sinif: duruş, bucaq və menteşə koordinatları.
  • WindowMetrics — Activity-yə bağlanmadan pəncərənin cari ölçülərini və piksel sıxlığını almaq üçün API.
  • ScreenContinuityController — qatlanan cihazı yığarkən və açarkən ekranın davamlılığını idarə etmək üçün komponent.
  • WindowSizeClass — müxtəlif cihazlar üçün adaptiv düzülüşü sadələşdirən ekran ölçüləri təsnifatçısı (Compact, Medium, Expanded).

Jetpack WindowManager nədir?

Jetpack WindowManager — AndroidX paketindən olan kitabxana, Android cihazlarında pəncərələr və ekran konfiqurasiyaları ilə işi abstraksiya edir. Ekranların parçalanması problemini həll edir: kompakt telefonlardan qatlanan cihazlara və desktop rejimi olan planşetlərə qədər.

WindowManager-in yaranmasından əvvəl proqramçılar köhnəlmiş Display API və Resources#getConfiguration-dan istifadə edirdilər ki, bunlar qatlanan cihazları və multi-window rejimlərini nəzərə almırdı. WindowManager bütün ssenarilər üçün vahid API təmin edir: bir kitabxana FoldingFeature, WindowMetrics, WindowSizeClassScreenContinuity-ni əhatə edir. Bu, boilerplate-kodun miqdarını azaldır və interfeysin müxtəlif cihazlara uyğunlaşdırılması zamanı səhvləri aradan qaldırır.

Google I/O 2024 məlumatlarına görə, Jetpack WindowManager stabil versiyası 1.3 menteşə sensorları, açılma bucağını təyin etmək üçün API və Jetpack Compose ilə təkmilləşdirilmiş inteqrasiyanı əhatə edir. Kitabxana Support Library vasitəsilə Android 10 (API 29)-a qədər geriyə uyğundur və avtomatik olaraq cihazın imkanlarına uyğunlaşır.

FoldingFeature: cihazın qatlanması ilə iş

FoldingFeature — qatlanan cihazlarla işləmək üçün Jetpack WindowManager-in mərkəzi sinifi. O, qatlanmanın fiziki vəziyyəti haqqında bütün məlumatları inkapsulyasiya edir: vəziyyət (HALF_OPENED, FLAT, TABLE_TOP), oriyentasiya (VERTICAL, HORIZONTAL), menteşə koordinatları və dərəcə ilə açılma bucağı.

FoldingFeature vəziyyətləri

Kitabxana dörd qatlanma vəziyyəti müəyyən edir. STATE_FLAT — cihaz tam açılıb, ekran düzdür. STATE_HALF_OPENED — cihaz qismən yığılıb, ekran 30 ilə 160 dərəcə arasında bucaq altındadır. STATE_TABLE_TOP — cihaz notebook duruşunda səthdə dayanır. STATE_FULLY_OPENED — 1.2 versiyasında FLAT ilə əvəz edilmiş köhnəlmiş vəziyyətdir.

Qatlanmanın oriyentasiyası və koordinatları

Qatlama şaquli (VERTICAL_FOLD) və ya üfüqi (HORIZONTAL_FOLD) ola bilər. Bounds — tətbiq pəncərəsinin koordinatlarında qatlama sahəsini təsvir edən düzbucaqlı. Proqramçı bu məlumatları UI elementlərini qatlamanın yuxarısına və aşağısına yerləşdirmək üçün istifadə edir, məzmunun kritik sahə ilə üst-üstə düşməsinin qarşısını alır.

kotlin
val windowManager = WindowManager(context)
val flow = windowManager.foldingFeature()

flow.collect { feature: FoldingFeature ->
    when (feature.state) {
        FoldingFeature.State.FLAT -> showFullScreen(feature.bounds)
        FoldingFeature.State.HALF_OPENED -> splitContentAcrossFold(feature.bounds)
        FoldingFeature.State.TABLE_TOP -> enableTouchpadMode()
    }
}

WindowMetrics və WindowSizeClass

WindowMetrics — WindowManager 1.0-dan etibarən mövcud olan, tətbiq pəncərəsinin dəqiq ölçülərini almaq üçün API. Display#getSize-dən fərqli olaraq, WindowMetrics multi-window rejimini, DeX-i və pəncərənin sərbəst formasını nəzərə alır. Metriklər currentWindowMetrics (cari ölçü) və maximumWindowMetrics (cihazda mümkün olan maksimum ölçü) qaytarır.

WindowSizeClass — WindowManager 1.1-də ortaya çıxan təsnifatçı. Ekranları üç kateqoriyaya ayırır: Compact (en 600dp-dən az — telefon), Medium (600–840dp — portret oriyentasiyasında planşet) və Expanded (840dp-dən çox — landşaft oriyentasiyasında planşet). Bu sinif adaptiv düzülüşü sadələşdirir, onlarla ölçü yoxlamasını bir təsnifatla əvəz edir.

WindowSizeClassEkran eniNümunə cihazTövsiyə olunan layout
Compact0–599dpPixel 8, Galaxy S24Single-pane, bottom navigation
Medium600–839dpPixel Fold (yığılıb), iPad MiniList-detail, side navigation
Expanded840dp+Galaxy Z Fold (açılıb), iPad ProMulti-pane, navigation rail
kotlin
class MyComposable {
    @Composable
    fun AdaptiveLayout(windowSizeClass: WindowSizeClass) {
        when (windowSizeClass.widthSizeClass) {
            WindowWidthSizeClass.Compact -> CompactScreen()
            WindowWidthSizeClass.Expanded -> ExpandedScreen()
            else -> MediumScreen()
        }
    }
}

ScreenContinuityController və ekran davamlılığı

ScreenContinuityController — qatlanan cihazın konfiqurasiyası dəyişərkən Activity vəziyyətini qorumaq üçün WindowManager komponenti. İstifadəçi telefonu açdıqda və ya yığdıqda, kontroller tətbiqi yeni duruş barədə xəbərdar edir və hamar keçid üçün mexanizmlər təqdim edir.

Kontroller registerContinuityListener vasitəsilə dinləyiciləri qeydiyyatdan keçirir, bu da FoldingFeature obyekti ilə callback qəbul edir. Hər duruş dəyişikliyində callback Activity-nin yenidən yaradılmasından əvvəl işə düşür, proqramçıya vəziyyəti əl ilə saxlamaq imkanı verir. Tətbiq ViewModel istifadə edirsə, əlavə emal tələb olunmur — məlumatlar avtomatik saxlanılır.

Jetpack Compose-da ScreenContinuity

Compose tətbiqləri ScreenContinuity-nin üstünlüklərini LocalWindowSizeClass və CompositionLocalProvider vasitəsilə əldə edir. Komponentlər WindowMetrics dəyişdikdə avtomatik olaraq rekompoze olunur. rememberSaveable rekompozisiyalar arasında vəziyyəti qoruyur, Modifier.windowInsets isə ekranın sistem sahələrini nəzərə alır.

kotlin
val controller = WindowManager(context).screenContinuityController
controller.registerContinuityListener { feature ->
    if (feature.state == FoldingFeature.State.FLAT) {
        logContinuityEvent("Device unfolded")
    }
}

Kotlin-də inteqrasiya nümunələri

Qatlanan cihazın müxtəlif duruşlarına uyğunlaşmaq üçün Jetpack WindowManager istifadə edən Activity-nin tam nümunəsinə baxaq. WindowManagerActivity Flow API vasitəsilə FoldingFeature dəyişikliklərinə abunə olur və layout-u bir- və iki-panel rejimləri arasında dəyişir.

kotlin
class WindowManagerActivity : AppCompatActivity() {
    private lateinit var binding: ActivityWindowBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityWindowBinding.inflate(layoutInflater)
        setContentView(binding.root)

        val windowManager = WindowManager(this)
        val metrics = windowManager.currentWindowMetrics

        if (metrics.bounds.width() > dpToPx(600)) {
            showDualPaneLayout()
        } else {
            showSinglePaneLayout()
        }
    }

    private fun showDualPaneLayout() {
        binding.content.layoutManager = GridLayoutManager(this, 2)
    }

    private fun showSinglePaneLayout() {
        binding.content.layoutManager = LinearLayoutManager(this)
    }
}

Nümunə əsas ssenarini göstərir: tətbiq WindowMetrics-i yoxlayır və bir- və ya iki-panel düzülüşü seçir. Real layihələrdə daha çevik uyğunlaşma üçün WindowSizeClass və qatlanan cihazların işlənməsi üçün FoldingFeature istifadə etmək tövsiyə olunur. Kitabxana həmçinin seamless transition — düzülüşlər arasında keçid zamanı hamar animasiyanı dəstəkləyir.

WindowManager-in test edilməsi və sazlanması

Android Studio Jetpack WindowManager-in test edilməsi üçün daxili alətlər ehtiva edir. Emulator Folding Postures bölməsi vasitəsilə duruşların dəyişdirilməsi ilə qatlanan cihazları (Pixel Fold, Galaxy Z Fold) dəstəkləyir. Layout Inspector real vaxtda cari WindowMetrics və FoldingFeature sərhədlərini göstərir.

ADB vasitəsilə sazlama

adb shell dumpsys window displays əmri bütün qoşulmuş displeylər və onların konfiqurasiyaları haqqında məlumatı çıxarır. Qatlanmanı simulyasiya etmək üçün əlavə duruş parametrləri ilə adb shell am broadcast -a android.intent.action.SCREEN_ON istifadə edin. WindowManager FoldingFeature-dəki bütün dəyişiklikləri WindowManager#logState vasitəsilə qeyd edir.

Tipik səhvlər

İnteqrasiya zamanı əsas problemlər — multi-window rejimində WindowMetrics yeniləmələrinin nəzərə alınmaması, şaquli qatlamada bounds-un səhv işlənməsi və bütün duruşlarda test edilməməsidir. Tövsiyə olunur hər duruşu ayrıca test etmək və onlar arasında keçid zamanı davranışı yoxlamaq. Ölçülərin əl ilə yoxlanması əvəzinə WindowSizeClass istifadə etmək səhvlərin sayını 60% azaldır.

Tez-tez verilən suallar

Android-in hansı versiyasından Jetpack WindowManager mövcuddur?

Jetpack WindowManager Android 5.0 (API 21)-dən etibarən Jetpack AndroidX vasitəsilə mövcuddur. Lakin FoldingFeature və ScreenContinuityController-in işləməsi üçün Android 10+ (API 29) və fiziki qatlanması olan cihaz tələb olunur. WindowMetrics bütün versiyalarda işləyir, lakin məlumatların dəqiqliyi istehsalçıdan asılıdır.

WindowManager Display API-dən nə ilə fərqlənir?

Display API köhnəlmişdir və qatlanan cihazları, multi-window və DeX rejimlərini nəzərə almır. WindowManager bütün ssenarilər üçün vahid API təmin edir: qatlamalar üçün FoldingFeature, dəqiq ölçülər üçün WindowMetrics və adaptiv düzülüş üçün WindowSizeClass. Display#getSize multi-window rejimində yanlış məlumatlar qaytara bilər.

WindowSizeClass adaptiv düzülüşdə necə kömək edir?

WindowSizeClass ekran eninin onlarla yoxlamasını üç kateqoriya ilə əvəz edir: Compact, Medium və Expanded. dp-nin əl ilə hesablanması və hədd dəyərlərlə müqayisə əvəzinə proqramçı müəyyən kateqoriya üçün düzülüş seçir. Bu, kodu sadələşdirir, səhv ehtimalını azaldır və yeni cihazların dəstəklənməsini sürətləndirir.

Qatlanan cihazlar yoxdursa, WindowManager-i layihəyə əlavə etmək lazımdırmı?

Bəli, WindowManager adi telefonlar üçün də faydalıdır. WindowMetrics multi-window rejimində və DeX istifadə edərkən düzgün işləyir. WindowSizeClass interfeysi planşetlərə və böyük ekranlara uyğunlaşdırmağa kömək edir. Kitabxana APK-ya cəmi 48 KB əlavə edir və performansa təsir göstərmir.

Qatlanan cihaz olmadan WindowManager-i necə test etmək olar?

Android Emulator Pixel Fold və ya Galaxy Z Fold tipli AVD ilə FoldingFeature-nin işini tam simulyasiya edir. Extended Controls-də Folding Postures bölməsini seçin və duruşları dəyişdirin. Həmçinin FoldingFeature mock-obyektləri ilə vahid test üçün WindowManager Test Kit istifadə edilə bilər.

Nəticə

  • Jetpack WindowManager — pəncərələri, qatlanan cihazları və adaptiv düzülüşü idarə etmək üçün AndroidX kitabxanası.
  • FoldingFeature qatlanma duruşu haqqında məlumat verir: HALF_OPENED, FLAT, TABLE_TOP menteşə koordinatları ilə.
  • WindowMetrics multi-window və DeX rejimlərini nəzərə alaraq pəncərənin dəqiq ölçülərini qaytarır.
  • WindowSizeClass adaptiv düzülüşü sadələşdirmək üçün ekranları Compact, Medium və Expanded-a təsnif edir.
  • ScreenContinuityController cihazı yığarkən və açarkən Activity vəziyyətinin qorunmasını təmin edir.
  • Android Emulator fiziki cihaz olmadan test etmək üçün bütün qatlanma duruşlarının simulyasiyasını dəstəkləyir.
  • Tövsiyə olunur planşetlərdə və qatlanan cihazlarda düzgün işləmək üçün WindowManager-i bütün layihələrə əlavə etmək.

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