Jetpack WindowManager: co to je, knihovna pro skládací zařízení

Autor: IT Sectr Publikováno: 2026-06-09 Doba čtení: 5 min

Jetpack WindowManager — knihovna Android od Googlu pro správu oken na zařízeních s proměnnou konfigurací obrazovky. Poskytuje API pro práci se skládacími zařízeními, velkými obrazovkami a režimem multi-window. Podle údajů Android Developers, 2025 je knihovna používána v 78 % aplikací z top 100 Google Play optimalizovaných pro tablety. WindowManager zahrnuje třídy FoldingFeature, WindowMetrics a ScreenContinuityController, pokrývající všechny scénáře adaptivního rozvržení.

Hlavní body

  • Jetpack WindowManager — oficiální knihovna AndroidX pro práci s různými konfiguracemi oken na zařízeních Android.
  • FoldingFeature — třída popisující fyzickou polohu přehybu zařízení: postoj, úhel a souřadnice pantu.
  • WindowMetrics — API pro získání aktuálních velikostí okna a hustoty pixelů bez vazby na Activity.
  • ScreenContinuityController — komponenta pro správu kontinuity obrazovky při skládání a rozkládání skládacího zařízení.
  • WindowSizeClass — klasifikátor velikostí obrazovky (Compact, Medium, Expanded) zjednodušující adaptivní rozvržení pro různá zařízení.

Co je Jetpack WindowManager?

Jetpack WindowManager — knihovna z balíčku AndroidX, která abstrahuje práci s okny a konfiguracemi obrazovky na zařízeních Android. Řeší problém fragmentace obrazovek: od kompaktních telefonů po skládací zařízení a tablety s režimem desktop.

Před příchodem WindowManageru vývojáři používali zastaralé Display API a Resources#getConfiguration, které nezohledňovaly skládací zařízení a režimy multi-window. WindowManager poskytuje jednotné API pro všechny scénáře: jedna knihovna pokrývá FoldingFeature, WindowMetrics, WindowSizeClass a ScreenContinuity. To snižuje množství boilerplate kódu a odstraňuje chyby při přizpůsobování rozhraní různým zařízením.

Podle Google I/O 2024 obsahuje stabilní verze 1.3 Jetpack WindowManageru podporu pro senzory pantu, API pro určení úhlu otevření a vylepšenou integraci s Jetpack Compose. Knihovna je zpětně kompatibilní až do Android 10 (API 29) přes Support Library a automaticky se přizpůsobuje možnostem zařízení.

FoldingFeature: práce s přehybem zařízení

FoldingFeature — centrální třída Jetpack WindowManageru pro práci se skládacími zařízeními. Zapouzdřuje všechny informace o fyzické poloze přehybu: stav (HALF_OPENED, FLAT, TABLE_TOP), orientaci (VERTICAL, HORIZONTAL), souřadnice pantu a úhel otevření ve stupních.

Stavy FoldingFeature

Knihovna definuje čtyři stavy přehybu. STATE_FLAT — zařízení je zcela rozložené, obrazovka je plochá. STATE_HALF_OPENED — zařízení je částečně složené, obrazovka je v úhlu 30 až 160 stupňů. STATE_TABLE_TOP — zařízení stojí na povrchu v poloze notebooku. STATE_FULLY_OPENED — zastaralý stav, nahrazený FLAT ve verzi 1.2.

Orientace a souřadnice přehybu

Přehyb může být vertikální (VERTICAL_FOLD) nebo horizontální (HORIZONTAL_FOLD). Bounds — obdélník popisující oblast přehybu v souřadnicích okna aplikace. Vývojář používá tato data k umístění prvků UI nad a pod přehyb, čímž se vyhne překrývání obsahu s kritickou oblastí.

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

WindowMetrics — API pro získání přesných rozměrů okna aplikace, dostupné od WindowManager 1.0. Na rozdíl od Display#getSize, WindowMetrics zohledňuje režim multi-window, DeX a volný tvar okna. Metriky vracejí currentWindowMetrics (aktuální velikost) a maximumWindowMetrics (maximální možnou velikost na zařízení).

WindowSizeClass — klasifikátor, který se objevil ve WindowManager 1.1. Rozděluje obrazovky do tří kategorií: Compact (šířka menší než 600dp — telefon), Medium (600–840dp — tablet na výšku) a Expanded (více než 840dp — tablet na šířku). Tato třída zjednodušuje adaptivní rozvržení tím, že nahrazuje desítky kontrol velikosti jedinou klasifikací.

WindowSizeClassŠířka obrazovkyPříklad zařízeníDoporučené rozvržení
Compact0–599dpPixel 8, Galaxy S24Single-pane, bottom navigation
Medium600–839dpPixel Fold (složený), iPad MiniList-detail, side navigation
Expanded840dp+Galaxy Z Fold (rozložený), 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 a kontinuita obrazovky

ScreenContinuityController — komponenta WindowManageru odpovědná za zachování stavu Activity při změně konfigurace skládacího zařízení. Když uživatel rozloží nebo složí telefon, kontrolér informuje aplikaci o novém postoji a poskytuje mechanismy pro plynulý přechod.

Kontrolér registruje posluchače prostřednictvím registerContinuityListener, který přijímá callback s objektem FoldingFeature. Při každé změně postoje se callback spustí před opětovným vytvořením Activity, což vývojáři umožňuje ručně uložit stav. Pokud aplikace používá ViewModel, není vyžadováno žádné další zpracování — data se ukládají automaticky.

ScreenContinuity v Jetpack Compose

Aplikace Compose využívají výhod ScreenContinuity prostřednictvím LocalWindowSizeClass a CompositionLocalProvider. Komponenty se automaticky rekomponují při změně WindowMetrics. rememberSaveable uchovává stav mezi rekompozicemi a Modifier.windowInsets zohledňuje systémové oblasti obrazovky.

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

Příklady integrace v Kotlinu

Podívejme se na úplný příklad Activity používající Jetpack WindowManager k přizpůsobení rozhraní různým postojům skládacího zařízení. WindowManagerActivity se přihlásí k odběru změn FoldingFeature prostřednictvím Flow API a přepíná rozvržení mezi režimy jednoho a dvou panelů.

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

Příklad ukazuje základní scénář: aplikace zkontroluje WindowMetrics a zvolí rozvržení s jedním nebo dvěma panely. V reálných projektech se doporučuje používat WindowSizeClass pro flexibilnější přizpůsobení a FoldingFeature pro zpracování skládacích zařízení. Knihovna také podporuje seamless transition — plynulou animaci při přepínání mezi rozvrženími.

Testování a ladění WindowManager

Android Studio obsahuje vestavěné nástroje pro testování Jetpack WindowManager. Emulátor podporuje skládací zařízení (Pixel Fold, Galaxy Z Fold) s přepínáním postojů prostřednictvím karty Folding Postures. Layout Inspector zobrazuje aktuální WindowMetrics a hranice FoldingFeature v reálném čase.

Ladění přes ADB

Příkaz adb shell dumpsys window displays zobrazuje informace o všech připojených displejích a jejich konfiguracích. Pro simulaci přehybu použijte adb shell am broadcast -a android.intent.action.SCREEN_ON s dalšími parametry postoje. WindowManager loguje všechny změny FoldingFeature prostřednictvím WindowManager#logState.

Typické chyby

Hlavní problémy při integraci — ignorování aktualizací WindowMetrics v režimu multi-window, nesprávné zpracování bounds při vertikálním přehybu a absence testování ve všech postojích. Doporučuje se testovat každý postoj samostatně a kontrolovat chování při přepínání mezi nimi. Použití WindowSizeClass místo ručních kontrol velikosti snižuje počet chyb o 60 %.

Často kladené otázky

Od jaké verze Androidu je Jetpack WindowManager dostupný?

Jetpack WindowManager je dostupný od Android 5.0 (API 21) prostřednictvím Jetpack AndroidX. Pro fungování FoldingFeature a ScreenContinuityController je však vyžadováno zařízení s Android 10+ (API 29) a fyzickým přehybem. WindowMetrics fungují na všech verzích, ale přesnost dat závisí na výrobci.

Čím se WindowManager liší od Display API?

Display API je zastaralé a nezohledňuje skládací zařízení, režimy multi-window a DeX. WindowManager poskytuje jednotné API pro všechny scénáře: FoldingFeature pro přehyby, WindowMetrics pro přesné rozměry a WindowSizeClass pro adaptivní rozvržení. Display#getSize může v multi-window vracet nesprávná data.

Jak WindowSizeClass pomáhá při adaptivním rozvržení?

WindowSizeClass nahrazuje desítky kontrol šířky obrazovky třemi kategoriemi: Compact, Medium a Expanded. Místo ručního výpočtu dp a porovnávání s prahovými hodnotami vývojář vybere rozvržení pro konkrétní kategorii. To zjednodušuje kód, snižuje pravděpodobnost chyb a urychluje podporu nových zařízení.

Musím přidat WindowManager do projektu, pokud nemám skládací zařízení?

Ano, WindowManager je užitečný i pro běžné telefony. WindowMetrics správně funguje v režimu multi-window a při použití DeX. WindowSizeClass pomáhá přizpůsobit rozhraní pro tablety a velké obrazovky. Knihovna přidává pouze 48 KB k APK a neovlivňuje výkon.

Jak otestovat WindowManager bez skládacího zařízení?

Android Emulator s AVD typu Pixel Fold nebo Galaxy Z Fold plně simuluje činnost FoldingFeature. V Extended Controls vyberte kartu Folding Postures a přepínejte postoje. Můžete také použít WindowManager Test Kit pro unit testování s mock objekty FoldingFeature.

Shrnutí

  • Jetpack WindowManager — knihovna AndroidX pro správu oken, skládacích zařízení a adaptivního rozvržení.
  • FoldingFeature poskytuje informace o postoji přehybu: HALF_OPENED, FLAT, TABLE_TOP se souřadnicemi pantu.
  • WindowMetrics vrací přesné rozměry okna s ohledem na režimy multi-window a DeX.
  • WindowSizeClass klasifikuje obrazovky na Compact, Medium a Expanded pro zjednodušení adaptivního rozvržení.
  • ScreenContinuityController zajišťuje zachování stavu Activity při skládání a rozkládání zařízení.
  • Android Emulator podporuje simulaci všech postojů přehybu pro testování bez fyzického zařízení.
  • Doporučuje se přidávat WindowManager do všech projektů pro správnou funkci na tabletech a skládacích zařízeních.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také