Áttekintést adunk arról, hogy az Android N közelgő többablakos támogatása mit jelent a fejlesztők számára, és hogyan hozhatják ki belőle a legtöbbet!
A többablakos támogatás egy ügyes funkció, amelyre várunk az Android N és már régóta szerettük volna, hogy minden eszközön elérhető legyen. Ahhoz azonban, hogy élvezetes élmény legyen, a fejlesztőknek szükségük lehet néhány változtatásra az alkalmazásaikban, hogy megfelelően támogassák.
A Google I/O munkamenetei közül a fejlesztők megismerkedhettek az új API-kkal és a többablakos támogatással járó rendszerviselkedési változásokkal.
A foglalkozást Wale Ogunwale, az Android ActivityManager és az Android ActivityManager műszaki vezető menedzsere prezentálta A WindowManager keretrendszer összetevői – ő és csapata a felelősek a több ablakos használatért Androidon.
Meg lehet nézni a Több ablakos mód munkamenet a YouTube-on, de itt adunk áttekintést is a foglalkozásról.
- Osztott képernyős mód: ez az alapértelmezés szerint elérhető mód. Ahogy a neve is sugallja, lehetővé teszi két alkalmazás megnyitását egymás mellett.
- Szabad formájú mód: a gyártók engedélyezhetik ezt a nagyobb eszközökön, így a felhasználók az osztott képernyős mód mellett szabadon átméretezhetik a tevékenységeket.
- Kép a képben mód: az Android TV-készülékeket célozza meg, ez a mód arra szolgál, hogy a videólejátszók rögzített ablakban futhassanak, miközben a felhasználó más alkalmazásokkal kommunikál.
android: resizeableActivity
tevékenység attribútuma a jegyzékében. false
. Ezt csak akkor szabad megtenni, ha valóban indokolt, mert ettől az alkalmazásod mindig rossz szemmel tűnik ki teljes képernyős módban történő indítás akkor is, ha a felhasználó (vagy egy másik alkalmazás) több ablakban próbálja elindítani mód. Fontos megjegyezni, hogy a gyökértevékenység attribútumai a feladatveremen belüli összes tevékenységre vonatkoznak. Más szóval, ha olyan tevékenysége van, amelyet más alkalmazások is elindíthatnak, győződjön meg arról, hogy támogatja a több ablakos módot mivel nem tudja garantálni, hogy más alkalmazások új feladatban indítják el tevékenységét a használatával. Intent#FLAG_ACTIVITY_NEW_TASK
A kép a képben mód támogatását kifejezetten deklarálni kell a következőn keresztül. android: supportsPictureInPicture
tulajdonság. Vegye figyelembe, hogy ezt az attribútumot a rendszer figyelmen kívül hagyja, ha. android: resizeableActivity
van. false
A .Layout attribútumok használhatók a szabad formájú ablakok alapértelmezett méreteinek és elhelyezésének beállítására, vagy minimális szélesség vagy magasság megadására szabad formájú és osztott képernyős módokhoz egyaránt: -
android: defaultWidth
/android: defaultHeight
: a tevékenység alapértelmezett méretei (szabad formájú mód). -
android: gravity
: a tevékenység kezdeti pozíciója (szabadformájú mód). -
android: minimalWidth
/android: minimalHeight
: a tevékenység minimális méretei (szabad formájú és osztott képernyős módok)
A tevékenység életciklusának megértése
A. tevékenység életciklusa változatlan több ablakos módban: Ennek ellenére az aktivitási állapotok közötti apró különbségek olyan nem kívánt viselkedést eredményezhetnek, amelyet N előtt általában nem vesz észre. Ezt fontos tudni.Activity#onResume()
és. Activity#onPause()
akkor hívják meg, amikor az alkalmazás fókuszba kerül vagy elveszíti, de nem feltétlenül akkor, amikor elkezdődik vagy megszűnik láthatóvá válni. (Ne feledje, hogy egy adott időpontban csak egy alkalmazás lehet fókuszban.) Azon alkalmazások esetében, amelyek folyamatosan frissítik a tartalmat (pl. videólejátszás), ügyeljen arra, hogy a tartalomfrissítések elindítását és leállítását kezelje. Activity#onStart()
és. Activity#onStop()
helyette. Nem teszi ezt például a videoalkalmazások esetében, azt jelenti, hogy a lejátszás csak akkor történik meg, ha az alkalmazás fókuszban van, amely legyőzi a több ablakos mód célját. A hivatalos YouTube alkalmazásnak hasonló problémája volt az Android N Developer Preview első elindításakor. Futásidejű változások kezelése
Amikor egy alkalmazást több ablakos módba helyez, bizonyos eszközkonfigurációk megváltoznak. Megengedheti tevékenységének újraindítását (ebben az esetben. töredékek megtartása jó ötlet lehet, ha tevékenységének intenzív műveletet kell végrehajtania az indításkor), vagy úgy dönt. kifejezetten kezeli a konfigurációs változásokat helyette. Négy eszközkonfiguráció módosulhat a többablakos módba lépéskor vagy azon belül:screenSize
, smallestScreenSize
, screenLayout
és. orientation
. Utal. Android Developers dokumentáció az egyes attribútumokról további információért, de vegye figyelembe. orientation
ebben az esetben már nem az eszköz tájolására utal. Ehelyett csupán azt jelzi, hogy a tevékenység szélessége nagyobb-e, mint a magassága (tájkép), ill nem (portré). A jegyzékből kijelentheti, hogy tevékenysége kezelni fogja ezeket a változtatásokat: android: name=".MyActivity"android: configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
Ne feledje, hogy ez azt jelenti, hogy valóban kezelnie kell ezeket a változásokat. Activity#onConfigurationChanged()
, a nézetek manuális frissítésével vagy egyes erőforrások újratöltésével. Letiltott funkciók több ablakos módban
A többablakos módban végzett tevékenységei bizonyos rendszerfunkciókat nem érintenek:- Az állapotsor és a navigációs sáv módosításai, mint például a rendszersávok elsötétítése/elrejtése vagy az immerzív mód használata, nincs hatással. Ez logikus, mivel tevékenysége csak a képernyő egy részét foglalja el.
- A
android: screenOrientation
Az activity attribútumnak nincs hatása több ablakos módban: mivel a tevékenység átméretezhető lesz, már nincs értelme, hogy fix tájolású legyen.
-
Activity#onMultiWindowModeChanged(boolean inMultiWindow)
: akkor hívják meg, ha a tevékenység állapota teljes képernyőről több ablakra változik, és fordítva. -
Activity#onPictureInPictureModeChanged(boolean inPictureOnPicture)
: akkor hívják meg, ha a tevékenység állapota PIP módba változik/változik. -
Activity#isInMultiWindowMode()
/Activity#isInPictureInPictureMode()
: visszaküldi, hogy a tevékenység több ablakos/kép a képben módban van-e vagy sem. -
Activity#overlayWithDecorCaption(boolean overlay)
: szabad formájú ablakok esetén ezzel a módszerrel a felirat (az ablak körbehúzására szolgáló sáv) a tartalom lefedésére használható ahelyett, hogy lenyomná.
Activity#overlayWithDecorCaption()
, ezeket a módszereket is a. Fragment
osztály. Tevékenységek indítása Több ablakos módban
-
Activity#enterPictureInPictureMode()
egy tevékenység kép a képben módba helyezésére használható. Ne feledje, hogy a PiP módban végzett tevékenységek nem kapnak értesítést a bemeneti eseményekről – használatMediaSession#setMediaButtonReceiver()
ha ilyen eseményeket akar kezelni. Ha érdekel, feltétlenül nézze meg az Android Developers webhelyet is Kép a képben Android N rendszeren.
- Ha az eszköz osztott képernyős módban van, a gombbal utasíthatja a rendszert, hogy indítson egy másik tevékenységet az Öné mellett
Intent#FLAG_ACTIVITY_LAUNCH_ADJACENT
zászló. A zászlónak nincs hatása, ha nem osztott képernyős módban van. - Ha a készülék szabad formájú módban van,
ActivityOptions#setLaunchBounds()
segítségével megadható az új tevékenység mérete és helye a képernyőn.
Drag and Drop
Míg a drag and drop támogatás a Honeycomb óta létezik, korábban csak ugyanazon a tevékenységen belül volt lehetséges. Havazik. több ablakban támogatott is. Ennek megvalósítása úgy tűnik. többnyire ugyanaz, mint korábban, néhány kiegészítéssel a kereszttevékenységekre vonatkozó drag and drop érdekében:View#startDragAndDrop()
- Új álnév a következőhöz
View#startDrag()
. - A tevékenységek közötti áthúzás engedélyezéséhez adja át az új jelzőt
View#DRAG_FLAG_GLOBAL
. - Ha URI-engedélyeket kell adnia a címzett tevékenységhez, adja át az új jelzőket
View#DRAG_FLAG_GLOBAL_URI_READ
vagyView#DRAG_FLAG_GLOBAL_URI_WRITE
, adott esetben.
- Új álnév a következőhöz
View#updateDragShadow()
- Lecseréli a húzási árnyékot az éppen folyamatban lévő húzási műveletnél. Csak az az alkalmazás hívhatja meg, amelyik a húzási műveletet kezdeményezte.
View#cancelDragAndDrop()
- Megszakítja az éppen folyamatban lévő húzási műveletet. Csak az az alkalmazás hívhatja meg, amelyik a húzási műveletet kezdeményezte.
- Ezen keresztül ellenőrizheti, hogy egy eszköz támogatja-e a szabad formájú vagy a kép a képben módot
PackageManager#hasSystemFeature()
, segítségévelPackageManager#FEATURE_FREEFORM_WINDOW_MANAGEMENT
ésPackageManager#FEATURE_FREEFORM_PICTURE_IN_PICTURE
illetőleg.
- A
android: windowBackground
attribútum használható háttérrajzolásként, ha a tevékenység átméretezése folyamatban van, és a megjelenítése elmarad. Haandroid: windowBackground
nincs beállítva,android: windowBackgroundFallback
helyett használják. Példaként tekintse meg a Multi-Window Playground minta alkalmazást.
- A fogantyú mód elegánsan változik:
- Fenntartja a felhasználói felület konzisztenciáját a tájolástól függetlenül. Ne változtassa meg az elemek pozícióját a sima átmenetek érdekében.
- A fentieket kibővítve, ne váltson a nagyon különböző elrendezések között a telefon/táblagép elrendezése esetén. Ehelyett igazítsa a táblagép elrendezését kisebb méretekhez a következetesség érdekében.
- Ügyeljen arra, hogy tevékenységei alkalmazkodjanak a kis méretekhez által az anyagtervezési mintákat követve.
- Használat
FLAG_ACTIVITY_LAUNCH_ADJACENT
amikor van értelme élvezetesebb élményt nyújtani osztott képernyős módban. - Csak indokolt esetben jelentse az átméretezés összeférhetetlenségét. Ahogy fentebb tárgyaltuk, ettől eltérő módon az alkalmazás rossz értelemben tűnik ki.
- Több ablakos dokumentáció.
- Anyagtervezési irányelvek az osztott képernyős módhoz.
- Példa több ablakos alkalmazásra.