Jetpack WindowManager: nedir, katlanabilir cihazlar için kütüphane

Yazar: IT Sectr Yayınlanma: 2026-06-09 Okuma süresi: 5 dk

Jetpack WindowManager, değişebilir ekran yapılandırmasına sahip cihazlarda pencereleri yönetmek için Google tarafından sağlanan bir Android kütüphanesidir. Katlanabilir cihazlar, büyük ekranlar ve çoklu pencere moduyla çalışmak için API sağlar. Android Developers, 2025'e göre, kütüphane tabletler için optimize edilmiş Google Play ilk 100 uygulamasının %78'inde kullanılmaktadır. WindowManager; FoldingFeature, WindowMetrics ve ScreenContinuityController sınıflarını içerir ve tüm uyarlanabilir düzen senaryolarını kapsar.

Önemli Noktalar

  • Jetpack WindowManager, Android cihazlarda çeşitli pencere yapılandırmalarıyla çalışmak için resmi AndroidX kütüphanesidir.
  • FoldingFeature, cihaz katlamasının fiziksel konumunu (duruş, açı ve menteşe koordinatları) tanımlayan bir sınıftır.
  • WindowMetrics, bir Activity'ye bağlanmadan geçerli pencere boyutlarını ve piksel yoğunluğunu almak için bir API'dir.
  • ScreenContinuityController, katlanabilir bir cihazı katlarken ve açarken ekran sürekliliğini yöneten bir bileşendir.
  • WindowSizeClass, çeşitli cihazlar için uyarlanabilir düzeni basitleştiren bir ekran boyutu sınıflandırıcısıdır (Compact, Medium, Expanded).

Jetpack WindowManager Nedir?

Jetpack WindowManager, AndroidX paketindeki bir kütüphanedir ve Android cihazlarda pencereler ve ekran yapılandırmalarıyla çalışmayı soyutlar. Kompakt telefonlardan katlanabilir cihazlara ve masaüstü modlu tabletlere kadar ekran parçalanması sorununu çözer.

WindowManager'dan önce geliştiriciler, katlanabilir cihazları ve çoklu pencere modlarını dikkate almayan eski Display API ve Resources#getConfiguration'u kullanıyordu. WindowManager, tüm senaryolar için birleşik bir API sağlar: tek bir kütüphane FoldingFeature, WindowMetrics, WindowSizeClass ve ScreenContinuity'yi kapsar. Bu, standart kod miktarını azaltır ve arayüzü farklı cihazlara uyarlarken oluşan hataları ortadan kaldırır.

Google I/O 2024'e göre, Jetpack WindowManager kararlı sürüm 1.3, menteşe sensörleri desteği, açılma açısını belirlemek için API ve Jetpack Compose ile gelişmiş entegrasyon içerir. Kütüphane, Support Library aracılığıyla Android 10 (API 29) ile geriye dönük uyumludur ve cihaz yeteneklerine otomatik olarak uyum sağlar.

FoldingFeature: Cihaz Katlamasıyla Çalışma

FoldingFeature, katlanabilir cihazlarla çalışmak için Jetpack WindowManager'ın merkezi sınıfıdır. Katlamanın fiziksel konumu hakkındaki tüm bilgileri (durum: HALF_OPENED, FLAT, TABLE_TOP, yön: VERTICAL, HORIZONTAL, menteşe koordinatları ve derece cinsinden açılma açısı) kapsüller.

FoldingFeature Durumları

Kütüphane dört katlama durumu tanımlar. STATE_FLAT — cihaz tamamen açık, ekran düz. STATE_HALF_OPENED — cihaz kısmen katlanmış, ekran 30 ila 160 derece açıda. STATE_TABLE_TOP — cihaz bir yüzey üzerinde dizüstü bilgisayar duruşunda. STATE_FULLY_OPENED — sürüm 1.2'de FLAT ile değiştirilen kullanımdan kaldırılmış bir durum.

Katlamanın Yönü ve Koordinatları

Katlamalar dikey (VERTICAL_FOLD) veya yatay (HORIZONTAL_FOLD) olabilir. Bounds, uygulama penceresi koordinatlarında katlama alanını tanımlayan bir dikdörtgendir. Geliştirici, UI öğelerini katlamanın üstüne ve altına yerleştirmek için bu verileri kullanır ve kritik alanla içerik çakışmasını önler.

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 ve WindowSizeClass

WindowMetrics, WindowManager 1.0'dan itibaren kullanılabilen, uygulama penceresinin kesin boyutlarını almak için bir API'dir. Display#getSize'in aksine, WindowMetrics çoklu pencere modunu, DeX'i ve serbest biçimli pencereyi dikkate alır. Metrikler currentWindowMetrics (geçerli boyut) ve maximumWindowMetrics (cihazda mümkün olan maksimum boyut) döndürür.

WindowSizeClass, WindowManager 1.1'de ortaya çıkan bir sınıflandırıcıdır. Ekranları üç kategoriye ayırır: Compact (genişlik 600dp'den az — telefon), Medium (600–840dp — dikey yönde tablet) ve Expanded (840dp'den fazla — yatay yönde tablet). Bu sınıf, düzinelerce boyut kontrolünü tek bir sınıflandırmayla değiştirerek uyarlanabilir düzeni basitleştirir.

WindowSizeClassEkran GenişliğiÖrnek CihazÖnerilen Düzen
Compact0–599dpPixel 8, Galaxy S24Tek bölme, alt navigasyon
Medium600–839dpPixel Fold (katlanmış), iPad MiniListe-ayrıntı, yan navigasyon
Expanded840dp+Galaxy Z Fold (açık), iPad ProÇoklu bölme, navigasyon rayı
kotlin
class MyComposable {
    @Composable
    fun AdaptiveLayout(windowSizeClass: WindowSizeClass) {
        when (windowSizeClass.widthSizeClass) {
            WindowWidthSizeClass.Compact -> CompactScreen()
            WindowWidthSizeClass.Expanded -> ExpandedScreen()
            else -> MediumScreen()
        }
    }
}

ScreenContinuityController ve Ekran Sürekliliği

ScreenContinuityController, katlanabilir cihaz yapılandırması değiştiğinde Activity durumunu korumaktan sorumlu bir WindowManager bileşenidir. Kullanıcı telefonu açtığında veya kapattığında, denetleyici uygulamayı yeni duruş hakkında bilgilendirir ve sorunsuz geçiş için mekanizmalar sağlar.

Denetleyici, bir FoldingFeature nesnesi içeren geri çağrıyı kabul eden registerContinuityListener aracılığıyla dinleyicileri kaydeder. Her duruş değişikliğinde, geri çağrı Activity yeniden oluşturulmadan önce tetiklenir ve geliştiriciye durumu manuel olarak kaydetme fırsatı verir. Uygulama ViewModel kullanıyorsa, ek işlem gerekmez — veriler otomatik olarak kaydedilir.

Jetpack Compose'da ScreenContinuity

Compose uygulamaları, LocalWindowSizeClass ve CompositionLocalProvider aracılığıyla ScreenContinuity'den yararlanır. WindowMetrics değiştiğinde bileşenler otomatik olarak yeniden oluşur. rememberSaveable yeniden oluşumlar arasında durumu korur ve Modifier.windowInsets sistem ekran alanlarını dikkate alır.

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

Kotlin'de Entegrasyon Örnekleri

Katlanabilir bir cihazın farklı duruşlarına arayüzü uyarlamak için Jetpack WindowManager kullanan bir Activity'nin tam örneğini inceleyelim. WindowManagerActivity, Flow API aracılığıyla FoldingFeature değişikliklerine abone olur ve tek bölmeli ve çift bölmeli düzenler arasında geçiş yapar.

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)
    }
}

Örnek, temel bir senaryoyu gösterir: uygulama WindowMetrics'i kontrol eder ve tek bölmeli veya çift bölmeli bir düzen seçer. Gerçek projelerde, daha esnek uyarlama için WindowSizeClass ve katlanabilir cihazları işlemek için FoldingFeature kullanılması önerilir. Kütüphane ayrıca kesintisiz geçişi destekler — düzenler arasında geçiş yaparken yumuşak animasyon.

WindowManager Test Etme ve Hata Ayıklama

Android Studio, Jetpack WindowManager'ı test etmek için yerleşik araçlar içerir. Emülatör, Folding Postures sekmesi aracılığıyla duruş değiştirme ile katlanabilir cihazları (Pixel Fold, Galaxy Z Fold) destekler. Layout Inspector, gerçek zamanlı olarak geçerli WindowMetrics ve FoldingFeature sınırlarını gösterir.

ADB ile Hata Ayıklama

adb shell dumpsys window displays komutu, bağlı tüm ekranlar ve yapılandırmaları hakkında bilgi verir. Bir katlamayı simüle etmek için, ek duruş parametreleriyle adb shell am broadcast -a android.intent.action.SCREEN_ON kullanın. WindowManager, WindowManager#logState aracılığıyla tüm FoldingFeature değişikliklerini görüntüler.

Yaygın Hatalar

Ana entegrasyon sorunları — çoklu pencere modunda WindowMetrics güncellemelerini görmezden gelme, dikey katlamada bounds'un yanlış işlenmesi ve tüm duruşlarda test eksikliği. Önerilir her duruşu ayrı ayrı test edin ve aralarında geçiş yaparken davranışı kontrol edin. Manuel boyut kontrolleri yerine WindowSizeClass kullanımı hataları %60 oranında azaltır.

Sıkça Sorulan Sorular

Jetpack WindowManager hangi Android sürümünden itibaren kullanılabilir?

Jetpack WindowManager, Android 5.0 (API 21)'den itibaren Jetpack AndroidX aracılığıyla kullanılabilir. Ancak FoldingFeature ve ScreenContinuityController'ın çalışması için Android 10+ (API 29) ve fiziksel katlaması olan bir cihaz gerekir. WindowMetrics tüm sürümlerde çalışır, ancak veri doğruluğu üreticiye bağlıdır.

WindowManager, Display API'den nasıl farklıdır?

Display API eskidir ve katlanabilir cihazları, çoklu pencere ve DeX modlarını dikkate almaz. WindowManager tüm senaryolar için birleşik bir API sağlar: katlamalar için FoldingFeature, kesin boyutlar için WindowMetrics ve uyarlanabilir düzen için WindowSizeClass. Display#getSize, çoklu pencerede yanlış veriler döndürebilir.

WindowSizeClass, uyarlanabilir düzende nasıl yardımcı olur?

WindowSizeClass, düzinelerce ekran genişliği kontrolünü üç kategoriyle değiştirir: Compact, Medium ve Expanded. Elle dp hesaplamak ve eşiklerle karşılaştırmak yerine, geliştirici belirli bir kategori için düzen seçer. Bu, kodu basitleştirir, hata olasılığını azaltır ve yeni cihaz desteğini hızlandırır.

Katlanabilir cihaz yoksa projeye WindowManager eklemek gerekli mi?

Evet, WindowManager normal telefonlar için bile kullanışlıdır. WindowMetrics, çoklu pencere modunda ve DeX kullanırken doğru çalışır. WindowSizeClass, tabletler ve büyük ekranlar için arayüzü uyarlamaya yardımcı olur. Kütüphane APK'ya yalnızca 48 KB ekler ve performansı etkilemez.

Katlanabilir cihaz olmadan WindowManager nasıl test edilir?

Pixel Fold veya Galaxy Z Fold gibi AVD'ye sahip Android Emulator, FoldingFeature işlemlerini tamamen simüle eder. Extended Controls'de Folding Postures sekmesini seçin ve duruşları değiştirin. Ayrıca FoldingFeature sahte nesneleriyle birim testleri için WindowManager Test Kit kullanabilirsiniz.

Özet

  • Jetpack WindowManager pencereleri, katlanabilir cihazları ve uyarlanabilir düzeni yönetmek için bir AndroidX kütüphanesidir.
  • FoldingFeature, menteşe koordinatlarıyla birlikte katlama duruşu (HALF_OPENED, FLAT, TABLE_TOP) hakkında bilgi sağlar.
  • WindowMetrics, çoklu pencere ve DeX modlarını dikkate alarak doğru pencere boyutlarını döndürür.
  • WindowSizeClass, uyarlanabilir düzeni basitleştirmek için ekranları Compact, Medium ve Expanded olarak sınıflandırır.
  • ScreenContinuityController, cihazı katlarken ve açarken Activity durumunun korunmasını sağlar.
  • Android Emulator, fiziksel cihaz olmadan test için tüm katlama duruşlarının simülasyonunu destekler.
  • Önerilir tabletlerde ve katlanabilir cihazlarda doğru çalışma için tüm projelere WindowManager eklenmesi.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun