Window Size Class är ett API från Jetpack WindowManager som delar upp applikationsfönstret i tre kategorier: Compact, Medium och Expanded. Istället för att kontrollera fysisk upplösning eller pixeltäthet analyserar klasserna den tillgängliga bredden i dp — detta ger ett förutsägbart resultat på alla enheter. Enligt Android Developers Documentation (2025) har Window Size Class blivit standarden för adaptiva gränssnitt i Jetpack Compose och View-systemet tack vare WindowManager.
Huvudpunkter
Window Size Class är ett API på Android-plattformen, en del av Jetpack WindowManager-biblioteket, som klassificerar det tillgängliga utrymmet i applikationsfönstret i tre kategorier. Till skillnad från det traditionella tillvägagångssättet med resurskvantifierare (small/large/xlarge) ger Window Size Class en diskret uppsättning värden som utvecklaren kan lita på när gränssnittet utformas.
API:et dök upp i Android 7.0 Nougat som en del av stödet för flerfönsterläge, men aktiv implementering började med Jetpack WindowManager 1.1 (2022). Google rekommenderar Window Size Class som det främsta verktyget för att bygga adaptiva layouter istället för att kontrollera skärmbredden via Display.getSize().
Klassificeringen baseras på fönsterbredden i dp, inte på fysisk storlek eller pixeltäthet. Detta innebär att två enheter med olika upplösning men samma bredd i dp får samma klass — gränssnittet kommer att vara förutsägbart identiskt.
Compact — klass för fönster med bredd upp till 600 dp. Telefon i porträttläge, de flesta vikbara telefoner (Galaxy Z Flip) i stängt tillstånd. Gränssnittet byggs i en kolumn, navigering via Bottom Navigation.
Medium — klass för fönster med bredd 600–840 dp. Surfplatta i porträtt, telefon i landskap, vikbar enhet i halvöppet tillstånd. Gränssnittet använder två kolumner — till exempel lista till vänster och detaljer till höger. Navigation Rail ersätter Bottom Navigation.
Expanded — klass för fönster med bredd från 840 dp. Surfplatta i landskap, desktopfönster, vikbar enhet i utfällt tillstånd. Gränssnittet kan använda tre eller fler paneler, Permanent Navigation Drawer, verktygspaneler.
I Material Design 3 definieras adaptiva komponenter för varje klass: Navigation Rail för Medium, Navigation Drawer för Expanded, Bottom Navigation för Compact. Utvecklaren behöver inte välja breakpoints — de är redan inställda av API:et.
Window Size Class beräknas baserat på den aktuella bredden på applikationsfönstret i dp med hänsyn till systemelement — statusfält, navigeringspanel, skärmdelning i Split Screen. API:et reagerar på förändringar i fönsterkonfigurationen: rotation av enheten, inträde i flerfönsterläge, utfällning av den vikbara enheten.
För att få klassen används klassen WindowSizeClass från biblioteket androidx.window. Utvecklaren prenumererar på Flow (Kotlin) eller LiveData (Java), som automatiskt uppdaterar klassen vid varje ändring av fönsterstorleken — utan manuell hantering av onConfigurationChanged.
Klassificering sker i tre steg. Första — mätning av den aktuella fönsterbredden i pixlar. Andra — konvertering till dp via DisplayMetrics.density. Tredje — jämförelse av det erhållna värdet med tröskelvärden: mindre än 600 dp — Compact, 600–840 — Medium, från 840 — Expanded.
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass()
when (windowSizeClass.windowWidthSizeClass) {
WindowWidthSizeClass.COMPACT -> // kompakt bredd
WindowWidthSizeClass.MEDIUM -> // medelbredd
WindowWidthSizeClass.EXPANDED -> // utökad bredd
}
Förutom bredd (windowWidthSizeClass) tillhandahåller API:et en klass för fönsterhöjd (windowHeightSizeClass) — användbart för liggande orientering och desktopfönster.
I Jetpack Compose används Window Size Class via funktionen currentWindowAdaptiveInfo(), som returnerar WindowAdaptiveInfo med bredd- och höjdklasser. Denna funktion tar inte bara hänsyn till fönsterstorleken utan även till inmatningstypen (tangentbord, mus, touch) — via WindowPosture och WindowLayoutInfo.
Typiskt scenario — växling mellan layouter beroende på klass. Till exempel på Compact visas ett BottomSheet med val, på Medium — en sidopanel, på Expanded — en permanent Navigation Drawer.
@Composable
fun AdaptiveNavigation(windowSizeClass: WindowWidthSizeClass) {
when (windowSizeClass) {
WindowWidthSizeClass.COMPACT -> BottomNavigation()
WindowWidthSizeClass.MEDIUM -> NavigationRail()
WindowWidthSizeClass.EXPANDED -> NavigationDrawer()
}
}
I Material Design 3 anpassar sig NavigationSuiteScaffold-komponenterna automatiskt till Window Size Class — utvecklaren behöver inte skriva villkorlig logik.
Material Design 3 (Material You) är helt integrerat med Window Size Class. Systemet adaptive layout i Material 3 bestämmer vilken navigeringskomponent som ska användas i varje klass: BottomNavigation för Compact, NavigationRail för Medium, NavigationDrawer för Expanded.
Denna integration fungerar på nivån av Adaptive API, som kombinerar Window Size Class med andra signaler — FoldState (vikbar enhet) och WindowPosture (skärmposition). Adaptive API är tillgängligt via biblioteket material3-adaptive.
Material 3 tillhandahåller fyra adaptiva komponenter på hög nivå: ListDetailPaneScaffold, SupportingPaneScaffold, NavigationSuiteScaffold och AdaptiveSheet. Var och en av dem ändrar sitt beteende beroende på Window Size Class utan ytterligare konfiguration.
| Klass | Navigation Component | Pane Scaffold |
|---|---|---|
| Compact | Bottom Navigation | Dold panel |
| Medium | Navigation Rail | Utdragbar panel |
| Expanded | Navigation Drawer | Permanent panel |
Användning av Window Size Class ger tre viktiga fördelar inom mobil utveckling. Första — förutsägbarhet: istället för hundratals kombinationer av skärmstorlekar arbetar utvecklaren med tre klasser. Detta minskar dramatiskt antalet testscenarier och buggar relaterade till layout.
Andra — automatisk anpassning till flerfönsterläge. När användaren går in i Split Screen ändras fönsterbredden — Window Size Class beräknas omedelbart om och gränssnittet anpassas. Utan detta API visar applikationen på en delad skärm en trunkerad version av telefonens gränssnitt.
Tredje — konsekvens med Material Design 3. Google har inbyggt Window Size Class i systemet med adaptiva komponenter, så gränssnitt byggda på Material 3 följer automatiskt Googles rekommendationer för design på stora skärmar utan extra arbete.
Vanliga frågor
Screen Size Buckets (small/large/xlarge) — ett föråldrat tillvägagångssätt från Android 1.6–6.0 baserat på fysisk skärmstorlek. Window Size Class fokuserar på tillgänglig fönsterbredd i dp och fungerar i realtid när fönsterstorleken ändras.
Window Size Class är tillgängligt via Jetpack WindowManager på Android 7.0+ med backport-bibliotek. För Android 6 och lägre — endast Compact, eftersom multi-window saknas. Använd fallback via WindowMetrics.
När enheten fälls ut ändras fönsterbredden och Window Size Class beräknas automatiskt om. Klassen kan ändras från Compact till Expanded på grund av ökningen av tillgängligt område.
Ja, via WindowManager i Activity eller Fragment. Efter att ha fått WindowSizeClass, använd villkorlig logik för att växla mellan XML-layouter eller ändra synligheten för View.
För fönsterhöjd är tröskelvärdena annorlunda: Compact — upp till 480 dp, Medium — 480–900 dp, Expanded — från 900 dp. WindowHeightSizeClass är användbart i liggande orientering och på stationära datorer.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också