Multi-Window — a multitasking módok gyűjteménye Androidban, amely lehetővé teszi több alkalmazás egyidejű futtatását a képernyőn. A rendszer három módot foglal magában: Split Screen a képernyő két részre osztásához, Picture-in-Picture a videóhoz mini-ablakban és Freeform tetszőleges méretű ablakokhoz nagy képernyőkön. A Android Developers (2025) szerint a Multi-Window támogatása kötelező a 600 dp vagy nagyobb képernyőszélességű eszközökön, és minden fejlesztőnek adaptálnia kell az alkalmazást a lehetséges ablakméret-változásokhoz.
Főbb pontok
Multi-Window — egy Android funkció, amely a 7.0 Nougat (API 24) verzióban került bevezetésre, és lehetővé teszi két vagy több alkalmazás egyidejű futtatását a képernyőn. A mód a Google válasza volt a táblagépek és nagy képernyős eszközök növekvő népszerűségére, ahol az egyfeladatos mód korlátozza a termelékenységet.
Az Android 7.0 előtt minden alkalmazás a teljes képernyőt foglalta el — az alkalmazások közötti váltáskor az előző minimalizálódott. A Multi-Window megváltoztatta ezt a modellt: most az alkalmazás elfoglalhatja a képernyő egy részét, miközben aktív marad. A fejlesztő számára ez azt jelenti, hogy onConfigurationChanged és a méretváltozások kezelése kötelezővé válik.
Az Android 12L (2022) rendszerben a Google a Multi-Window-t tette alapértelmezett móddá a nagy képernyős eszközökön — a táblagépeken minden alkalmazás olyan módban indul, amely engedélyezi a többablakos működést. Kivételt csak a manifestben kifejezetten tiltott alkalmazások képeznek.
Split Screen — a legelterjedtebb mód. A képernyő két részre oszlik vízszintesen vagy függőlegesen, a felhasználó húzza az elválasztót. Elérhető telefonokon és táblagépeken. Az Overview (Recents) menüponton keresztül aktiválható — az alkalmazás ikonjának a felső vagy alsó szélére húzásával.
Picture-in-Picture (PiP) — mód videó- és navigációs alkalmazásokhoz. A tartalom egy lebegő mini-ablakban jelenik meg (a képernyő kb. 15–25%-a), amely mozgatható. Elérhető Android 8.0+. Aktiváláshoz az Activity enterPictureInPictureMode() függvényét használjuk.
Freeform — tetszőleges méretű ablakok módja, hasonló az asztali ablakkezelőkhöz. Elérhető Android TV-n és egyes gyártók nagy képernyős eszközein (Samsung DeX). Az alkalmazások címsorral és vezérlőgombokkal ellátott ablakokban indulnak.
Amikor a felhasználó aktiválja a Multi-Window-t, az Android új Activity példányt hoz létre minden alkalmazáshoz, és elosztja a rendelkezésre álló képernyőterületet. Az aktivitások külön Task-okba kerülnek, de ugyanazt a StackView-t használják, közöttük elválasztóval.
A rendszer értesíti minden Activity-t a méretváltozásról a onConfigurationChanged() függvényen keresztül. Ha az Activity nem kezeli ezt az eseményt — újra létrejön (recreate). Split Screen esetén az ablak szélessége 220 dp-ig — a platform által támogatott minimális szélességig — csökkenhet.
Az Android lehetővé teszi az alkalmazás számára a minimális szélesség deklarálását a android:minWidth és android:minHeight segítségével a manifestben. Ha a rendelkezésre álló hely kisebb a megadott értékeknél — az Activity szünetre lép.
A Multi-Window támogatásához be kell állítani a android:resizeableActivity="true" flag-et a manifestben. Ez azt jelenti, hogy az alkalmazás képes méretet változtatni az ablak változásakor. Alapértelmezés szerint Android 12L+ rendszeren minden alkalmazás resizeable-nak minősül — a flag figyelmen kívül hagyásra kerül.
Az ablak méretének változásakor az Activity újra létrejöhet (alapértelmezett) vagy kezelheti az eseményt a onConfigurationChanged függvényben, ha a manifestben meg van adva a configChanges="screenSize|smallestScreenSize". Javasolt a configChanges megadása a kulcsfontosságú Activity-k számára az állapotvesztés elkerülése érdekében.
<activity
android:name=".MainActivity"
android:resizeableActivity="true"
android:configChanges="screenSize|smallestScreenSize|orientation" />
Azoknál az alkalmazásoknál, amelyek nem támogatják a méretváltozást, az Android figyelmeztető párbeszédpanelt jelenít meg. Ebben az esetben a többablakos módba való váltáskor a rendszer befejezheti az Activity-t és megjeleníthet egy snackbar-t az újraindítási javaslattal.
A Multi-Window megváltoztatja az Activity szokásos életciklusát. Amikor egy másik alkalmazás aktívvá válik a szomszédos ablakban, a jelenlegi Activity megkapja az onPause() hívást, de nem az onStop() -t — látható marad, bár nem fókuszban. Ez fontos: a videolejátszónak folytatnia kell a lejátszást onPause-kor, nem onStop-kor.
A fejlesztőnek meg kell különböztetnie az állapotokat: onPause + isInMultiWindowMode() = true csak fókuszvesztést jelent, nem a képernyő elhagyását. Videók és animációk esetén ez jelzés arra, hogy ne állítsa le a lejátszást, csak távolítsa el a kiemelést a vezérlőelemekről.
A Multi-Window-ból való kilépéskor az onMultiWindowModeChanged() az onResume() előtt kerül meghívásra. Ez lehetőséget ad a felület teljes képernyős módra való átépítésére, mielőtt a felhasználó megkezdené az interakciót.
Első szabály — állapot megőrzése. Többablakos módban az Activity bármikor újra létrejöhet. Használja a SavedStateHandle-t a ViewModel-ben vagy az onSaveInstanceState-t minden olyan adathoz, amelyet meg kell őrizni a konfigurációs változások között.
Második — tesztelés minimális 220 dp szélességen. Ez az érték számít a legkeskenyebb ablaknak Split Screen-ben. A felületnek olvashatónak és funkcionálisnak kell maradnia. Ha egyes elemek túllépik a határokat — használja a Window Size Class-t a layout-ok közötti váltáshoz.
Harmadik — a Multi-Window-ban nem működő funkciók kikapcsolása. Például a Camera elérhetetlen lehet, ha a képernyő túl kicsi. Ellenőrizze az isInMultiWindowMode() függvényt a kamera vagy más teljes képernyős funkciók elindítása előtt.
Gyakran ismételt kérdések
Állítsa be a android:resizeableActivity="false" értéket a manifestben. Android 12L+ rendszeren a flag figyelmen kívül hagyásra kerül a nagy képernyős eszközökön, ezért a teljes letiltáshoz használja a android:maxAspectRatio értéket.
Hívja meg az isInMultiWindowMode() függvényt az Activity-ből. A metódus true értéket ad vissza, ha az alkalmazás Split Screen, PiP vagy Freeform módban működik. Feliratkozhat az onMultiWindowModeChanged() eseményre is.
Android TV-n csak a Picture-in-Picture mód érhető el. A Split Screen és a Freeform nem támogatott — a TV-k egy fő képernyőt használnak PiP-ablakkal a sarokban.
A foreground-szolgáltatás a módtól függetlenül folytatja a működését. De ha az alkalmazás PiP módba lép, a rendszer ideiglenesen felfüggesztheti a végrehajtást az erőforrások megtakarítása érdekében.
Az Android támogatja a Drag and Drop funkciót az ablakok között Multi-Window-ban a ClipData és View.OnDragListener segítségével. Az adatok ContentProvider-en vagy Intent-en keresztül kerülnek átvitelre FLAG_GRANT_READ_URI_PERMISSION címkével.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is