Window Size Class — nedir, boyut sınıfları ve geliştirme

Yazar: IT Sectr Yayınlanma: 2026-06-08 Okuma süresi: 9 dk

Window Size Class, Jetpack WindowManager'dan uygulama penceresini üç kategoriye ayıran bir API'dir: Compact, Medium ve Expanded. Fiziksel çözünürlük veya piksel yoğunluğunu kontrol etmek yerine, sınıflar dp cinsinden mevcut genişliği analiz eder — bu her cihazda tahmin edilebilir bir sonuç verir. Android Developers Documentation (2025)'a göre, Window Size Class WindowManager sayesinde Jetpack Compose ve View sisteminde uyarlanabilir arayüzler için standart haline gelmiştir.

Önemli Noktalar

  • Window Size Class — Pencere genişliğini Compact, Medium ve Expanded olarak kategorize eden API.
  • Compact — 600 dp'ye kadar dar pencereler için sınıf, portre modundaki telefonlar için tipik.
  • Medium — 600–840 dp pencereler için sınıf, portre modunda tabletler ve manzara modunda telefonlar için karakteristik.
  • Expanded — 840 dp'den geniş pencereler için sınıf, tabletlerde ve masaüstünde bulunur.
  • Material Design 3, uyarlanabilir düzenin temeli olarak Window Size Class'ı kullanır.

Window Size Class nedir?

Window Size Class, Jetpack WindowManager kitaplığına dahil olan ve uygulama penceresinin kullanılabilir alanını üç kategoriye ayıran bir Android platform API'sidir. Kaynak niteleyicileri (small/large/xlarge) ile geleneksel yaklaşımın aksine, Window Size Class geliştiricinin arayüzü tasarlarken güvenebileceği ayrı bir değer kümesi sağlar.

API, Android 7.0 Nougat'ta çoklu pencere modu desteğinin bir parçası olarak ortaya çıktı, ancak aktif benimseme Jetpack WindowManager 1.1 (2022) ile başladı. Google, Display.getSize() aracılığıyla ekran genişliğini kontrol etmek yerine uyarlanabilir düzenler oluşturmak için Window Size Class'ı ana araç olarak önerir.

Sınıflandırma, fiziksel boyut veya piksel yoğunluğuna değil, dp cinsinden pencere genişliğine dayanır. Bu, farklı çözünürlüklere ancak dp cinsinden aynı genişliğe sahip iki cihazın aynı sınıfı alacağı anlamına gelir — arayüz tahmin edilebilir şekilde aynı olacaktır.

Android'de üç pencere boyut sınıfı

Compact — 600 dp'ye kadar genişlikteki pencereler için sınıf. Portre modunda telefon, katlanmış durumda çoğu katlanabilir cihaz (Galaxy Z Flip). Arayüz tek sütunda oluşturulur, Bottom Navigation ile gezinme.

Medium — 600–840 dp genişliğindeki pencereler için sınıf. Portrede tablet, manzarada telefon, yarı açık durumda katlanabilir cihaz. Arayüz iki sütun kullanır — örneğin, solda liste ve sağda ayrıntılar. Navigation Rail, Bottom Navigation!ın yerini alır.

Expanded — 840 dp'den geniş pencereler için sınıf. Manzarada tablet, masaüstü penceresi, açık durumda katlanabilir cihaz. Arayüz üç veya daha fazla panel, Permanent Navigation Drawer, araç panelleri kullanabilir.

Material Design 3'te her sınıf için uyarlanabilir bileşenler tanımlanmıştır: Medium için Navigation Rail, Expanded için Navigation Drawer, Compact için Bottom Navigation. Geliştiricinin breakpoints seçmesi gerekmez — bunlar zaten API tarafından tanımlanmıştır.

Window Size Class nasıl çalışır

Window Size Class, sistem öğeleri — durum çubuğu, gezinme çubuğu, Split Screen'te ekran bölünmesi — dikkate alınarak uygulama penceresinin dp cinsinden mevcut genişliğine göre hesaplanır. API, pencere yapılandırması değiştiğinde tetiklenir: cihaz döndürme, çoklu pencere moduna geçiş, katlanabilir cihazı açma.

Sınıfı elde etmek için androidx.window kitaplığından WindowSizeClass sınıfı kullanılır. Geliştirici, manuel onConfigurationChanged işleme olmadan pencere boyutundaki her değişiklikte sınıfı otomatik olarak güncelleyen bir Flow (Kotlin) veya LiveData (Java)!a abone olur.

Sınıflandırma üç adımda gerçekleşir. Birinci — mevcut pencere genişliğini piksel cinsinden ölçme. İkinci — DisplayMetrics.density aracılığıyla dp'ye dönüştürme. Üçüncü — elde edilen değeri eşiklerle karşılaştırma: 600 dp'den az — Compact, 600–840 — Medium, 840'dan — Expanded.

kotlin
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass()

when (windowSizeClass.windowWidthSizeClass) {
    WindowWidthSizeClass.COMPACT -> // compact width
    WindowWidthSizeClass.MEDIUM  -> // medium width
    WindowWidthSizeClass.EXPANDED -> // expanded width
}

Genişliğin (windowWidthSizeClass) yanı sıra, API pencere yüksekliği için bir sınıf (windowHeightSizeClass) sağlar — manzara yönelimi ve masaüstü pencereleri için kullanışlıdır.

Jetpack Compose'ta Window Size Class

Jetpack Compose'ta Window Size Class, genişlik ve yükseklik sınıflarıyla WindowAdaptiveInfo döndüren currentWindowAdaptiveInfo() işlevi aracılığıyla kullanılır. Bu işlev yalnızca pencere boyutunu değil, aynı zamanda giriş türünü (klavye, fare, dokunma) — WindowPosture ve WindowLayoutInfo aracılığıyla — da dikkate alır.

Tipik bir senaryo, sınıfa göre düzenler arasında geçiş yapmaktır. Örneğin, Compact!ta seçimli bir BottomSheet görüntülenir, Medium'da — bir yan panel, Expanded'da — kalıcı bir Navigation Drawer.

kotlin
@Composable
fun AdaptiveNavigation(windowSizeClass: WindowWidthSizeClass) {
    when (windowSizeClass) {
        WindowWidthSizeClass.COMPACT -> BottomNavigation()
        WindowWidthSizeClass.MEDIUM  -> NavigationRail()
        WindowWidthSizeClass.EXPANDED -> NavigationDrawer()
    }
}

Material Design 3'te NavigationSuiteScaffold bileşenleri otomatik olarak Window Size Class!a uyum sağlar — geliştiricinin koşullu mantık yazması gerekmez.

Window Size Class ve Material Design 3

Material Design 3 (Material You), Window Size Class ile tamamen entegredir. Material 3'teki uyarlanabilir düzen sistemi, her sınıf için hangi gezinme bileşeninin kullanılacağını belirler: Compact için BottomNavigation, Medium için NavigationRail, Expanded için NavigationDrawer.

Bu entegrasyon, Window Size Class!ı diğer sinyallerle — FoldState (katlanabilir cihaz) ve WindowPosture (ekran konumu) — birleştiren Adaptive API düzeyinde çalışır. Adaptive API, material3-adaptive kitaplığı aracılığıyla kullanılabilir.

Material 3, dört uyarlanabilir üst düzey bileşen sağlar: ListDetailPaneScaffold, SupportingPaneScaffold, NavigationSuiteScaffold ve AdaptiveSheet. Her biri, ek yapılandırma olmadan Window Size Class!a göre davranışını değiştirir.

SınıfGezinme bileşeniPane Scaffold
CompactBottom NavigationGizli panel
MediumNavigation RailKayan panel
ExpandedNavigation DrawerKalıcı panel

Uyarlanabilir düzenlerin avantajları

Window Size Class kullanımı, mobil geliştirmede üç temel avantaj sağlar. Birinci — tahmin edilebilirlik: yüzlerce ekran boyutu kombinasyonu yerine, geliştirici üç sınıfla çalışır. Bu, test senaryolarının sayısını ve düzenle ilgili hataları kökten azaltır.

İkinci — çoklu pencere moduna otomatik uyum. Kullanıcı Split Screen'e girdiğinde, pencere genişliği değişir — Window Size Class anında yeniden hesaplanır ve arayüz uyum sağlar. Bu API olmadan, bölünmüş ekrandaki uygulama telefon arayüzünün küçültülmüş bir sürümünü gösterir.

Üçüncü — Material Design 3 ile tutarlılık. Google, Window Size Class!ı uyarlanabilir bileşen sistemine yerleştirdi, bu nedenle Material 3 üzerine kurulu arayüzler, ek çalışma gerektirmeden otomatik olarak büyük ekran tasarımı için Google!ın önerilerini takip eder.

Sıkça Sorulan Sorular

Window Size Class, Screen Size Buckets'tan nasıl farklıdır?

Screen Size Buckets (small/large/xlarge), ekranın fiziksel boyutuna dayanan Android 1.6–6.0!dan kalma bir yaklaşımdır. Window Size Class, dp cinsinden mevcut pencere genişliğine odaklanır ve pencere boyutu değiştiğinde gerçek zamanlı çalışır.

Android 6 ve altında Window Size Class!ı desteklemek gerekli mi?

Window Size Class, Android 7.0+!ta geri uyumlu kitaplıkla Jetpack WindowManager aracılığıyla kullanılabilir. Android 6 ve altı için — yalnızca Compact, çünkü çoklu pencere yoktur. WindowMetrics aracılığıyla geri dönüş kullanın.

Katlanabilir cihazlarda Window Size Class nasıl çalışır?

Cihaz açıldığında, pencere genişliği değişir ve Window Size Class otomatik olarak yeniden hesaplanır. Kullanılabilir alanın artması nedeniyle sınıf Compact!tan Expanded!a değişebilir.

Window Size Class XML düzeninde (Views) kullanılabilir mi?

Evet, Activity veya Fragment!ta WindowManager aracılığıyla. WindowSizeClass!ı aldıktan sonra, XML düzenleri arasında geçiş yapmak veya View görünürlüğünü değiştirmek için koşullu mantık kullanın.

WindowHeightSizeClass için hangi eşikler kullanılır?

Pencere yüksekliği için eşikler farklıdır: Compact — 480 dp'ye kadar, Medium — 480–900 dp, Expanded — 900 dp'den itibaren. WindowHeightSizeClass manzara yöneliminde ve masaüstünde kullanışlıdır.

Özet

  • Window Size Class — Pencere genişliğini Compact, Medium ve Expanded olarak kategorize eden Jetpack WindowManager API'si.
  • Compact — 600 dp'ye kadar, tek sütunlu arayüz, Bottom Navigation.
  • Medium — 600–840 dp, iki sütunlu arayüz, Navigation Rail.
  • Expanded — 840 dp'den itibaren, çok panelli arayüz, Navigation Drawer.
  • Jetpack Compose — Çalışma zamanında sınıfı almak için currentWindowAdaptiveInfo() işlevi.
  • Material Design 3 — Uyarlanabilir bileşenler otomatik olarak Window Size Class!a tepki verir.
  • Sonuç — Window Size Class, geleneksel breakpoint tabanlı uyarlamanın yerini alır ve arayüzleri tüm cihazlarda tahmin edilebilir hale getirir.

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