Více oken v systému Android N: Co vývojáři potřebují vědět, aby to co nejlépe využili

click fraud protection

Poskytujeme přehled toho, co pro vývojáře znamená nadcházející podpora více oken v Androidu N a jak z ní vytěžit maximum!

Podpora více oken je úhledná funkce, na kterou čekáme v systému Android N a takový, který jsme již dlouho chtěli mít k dispozici na všech zařízeních. Aby to byl příjemný zážitek, vývojáři možná budou muset provést nějaké změny ve svých aplikacích, aby je správně podporovaly.

Jedna z relací Google I/O byla určena pro vývojáře, aby se dozvěděli o nových rozhraních API a změnách chování systému, které přináší podpora více oken.

Přednášku uvedl Wale Ogunwale, technický vedoucí manažer pro Android ActivityManager a Komponenty rámce WindowManager -- on a jeho tým jsou zodpovědní za více oken na Androidu.

Můžete sledovat Relace v režimu více oken na YouTube, ale také zde uvádíme přehled relace.

N představuje tři různé režimy více oken:
  • Režim rozdělené obrazovky: Toto je režim, který je k dispozici ve výchozím nastavení. Jak název napovídá, umožňuje vám otevřít dvě aplikace vedle sebe.
  • Volný režim: výrobci to mohou povolit na větších zařízeních, což uživatelům umožňuje libovolně měnit velikost aktivit kromě režimu rozdělené obrazovky.
  • Režim obraz v obraze: Tento režim zaměřený na zařízení Android TV je určen pro přehrávače videa ke spuštění v připnutém okně, zatímco uživatel komunikuje s jinými aplikacemi.
Režim rozdělené obrazovky Android NRežim Android N PiP
To stojí za zmínku. Již dříve jsme se zabývali více okny na N a nabídli jsme určitou kritiku současného systému. S ohledem na to doufáme, že se režim volného tvaru trochu přiblíží režimu obrazu v obraze, protože by to mělo užitečné aplikace na všech zařízeních.
Povolení podpory více oken ve vašich aplikacích je jednoduché: pokud již cílíte na N, nemusíte nic dělat. Pokud se rozhodnete zakázat více oken, můžete tak učinit nastavením. android: resizeableActivity atribut aktivity ve vašem manifestu. false. To by mělo být provedeno pouze v případě, že je to skutečně odůvodněné, protože vaše aplikace vždy vyniká špatným způsobem spuštění v režimu celé obrazovky, i když se uživatel (nebo jiná aplikace) pokusí spustit ve více oknech režimu. Je důležité si uvědomit, že atributy kořenové aktivity se vztahují na všechny aktivity v jejím zásobníku úloh. Jinými slovy, pokud máte aktivitu, kterou lze spustit jinými aplikacemi, ujistěte se, že podporuje režim více oken protože nemůžete zaručit, že jiné aplikace spustí vaši aktivitu v nové úloze pomocí. Intent#FLAG_ACTIVITY_NEW_TASK Podpora režimu .Picture-in-picture musí být explicitně deklarována prostřednictvím. android: supportsPictureInPicture atribut. Všimněte si, že tento atribut je ignorován, pokud. android: resizeableActivity je. false Atributy .Layout lze použít k nastavení výchozích rozměrů a umístění pro okna volného tvaru nebo k určení minimální šířky nebo výšky pro režimy volného tvaru a rozdělené obrazovky:
  • android: defaultWidth/android: defaultHeight: výchozí rozměry aktivity (režim volného tvaru).
  • android: gravity: počáteční poloha aktivity (režim volného tvaru).
  • android: minimalWidth/android: minimalHeight: minimální rozměry aktivity (volný tvar a režim rozdělené obrazovky)
Příklad kódu najdete v. Ukázková aplikace Google Playground Multi-Window Playground na GitHubu: AndroidManifest.xml.
Se zavedením podpory více oken možná budete muset znovu zkontrolovat několik věcí ve svých aplikacích, abyste se ujistili, že fungují správně.

Pochopení životního cyklu aktivity

The. životní cyklus činnosti se nemění v režimu více oken: Základní životní cyklus aktivity Android Jak již bylo řečeno, některé jemné rozdíly mezi stavy aktivity mohou vést k nezamýšlenému chování, kterého byste si normálně před N nevšimli. Je důležité to vědět. Activity#onResume() a. Activity#onPause() jsou volány, když vaše aplikace získá nebo ztratí pozornost, ale ne nutně, když se spustí nebo přestane být viditelná. (Nezapomeňte, že v daný okamžik může být aktivní pouze jedna aplikace.)U aplikací, které neustále aktualizují obsah (např. přehrávání videa), se ujistěte, že spouštění a zastavování aktualizací obsahu probíhá v. Activity#onStart() a. Activity#onStop() namísto. Nečiní to například u video aplikací, znamená, že přehrávání proběhne pouze v případě, že je aplikace zaměřena, což maří účel režimu více oken. Oficiální aplikace YouTube měla podobný problém při prvním spuštění Android N Developer Preview.

Zpracování změn za běhu

Když je aplikace uvedena do režimu více oken, změní se některé konfigurace zařízení. Můžete buď povolit restartování vaší aktivity (v tom případě. zadržování fragmentů může být dobrý nápad, pokud vaše činnost musí při spuštění provádět intenzivní operaci), nebo si to vyberte. zpracovat změny konfigurace explicitně namísto. Při vstupu do režimu více oken nebo v něm se mohou změnit čtyři konfigurace zařízení: screenSize, smallestScreenSize, screenLayout a. orientation. Odkazovat na. Dokumentace Android Developers pro více informací o každém atributu, ale všimněte si toho. orientation v tomto případě se již nevztahuje na orientaci zařízení. Místo toho pouze uvádí, zda je šířka vaší aktivity větší než její výška (na šířku) resp ne (na výšku). Prohlášení, že vaše aktivita zvládne tyto změny, lze provést z manifestu:
android: name=".MyActivity"android: configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
Mějte na paměti, že to znamená, že tyto změny budete skutečně muset zvládnout. Activity#onConfigurationChanged()ruční aktualizací pohledů nebo opětovným načtením některých zdrojů.

Zakázané funkce v režimu více oken

Některé funkce systému nebudou ovlivněny vašimi aktivitami v režimu více oken:
  • Změny stavového a navigačního panelu, jako je ztlumení/skrytí systémových pruhů nebo použití imerzního režimu, nebudou mít žádný vliv. To dává smysl, protože vaše aktivita zabírá pouze část obrazovky.
  • The android: screenOrientation Atribut aktivity také nemá žádný vliv v režimu více oken: protože velikost vaší aktivity bude měnitelná, již nedává smysl, aby měla pevnou orientaci.
Byla přidána nová zpětná volání pro události s více okny a také metody dotazování na aktuální stav.
  • Activity#onMultiWindowModeChanged(boolean inMultiWindow): volá se, když se stav aktivity změní z celé obrazovky na více oken a naopak.
  • Activity#onPictureInPictureModeChanged(boolean inPictureOnPicture): volá se, když se stav aktivity změní do/z režimu PIP.
  • Activity#isInMultiWindowMode()/Activity#isInPictureInPictureMode(): vrátí, zda je aktivita v režimu více oken/obraz v obraze či nikoli.
  • Activity#overlayWithDecorCaption(boolean overlay): pro okna s volným tvarem lze tuto metodu použít k tomu, aby titulek (lišta používaná k přetahování okna) překrýval obsah místo toho, aby jej tlačil dolů.
PS. Až na. Activity#overlayWithDecorCaption(), tyto metody také poskytuje. Fragment třída.

Spouštění činností v režimu více oken

  • Activity#enterPictureInPictureMode() lze použít k uvedení aktivity do režimu obraz v obraze. Všimněte si, že aktivity v režimu PiP nedostávají upozornění na vstupní události -- použijte MediaSession#setMediaButtonReceiver() chcete-li takové akce řešit. Pokud vás to zajímá, nezapomeňte se také podívat na web Android Developers Obraz v obraze na Androidu N.
  • Pokud je zařízení v režimu rozdělené obrazovky, můžete systému říci, aby spustil další aktivitu vedle vaší pomocí Intent#FLAG_ACTIVITY_LAUNCH_ADJACENT vlajka. Vlajka nemá žádný účinek, pokud není v režimu rozdělené obrazovky.
  • Pokud je zařízení v režimu volného tvaru, ActivityOptions#setLaunchBounds() lze použít k určení rozměrů a umístění nové aktivity na obrazovce.
Příklady kódu najdete v ukázkové aplikaci Multi-Window Playground: příklad sousední aktivity, příklad startovacích hranic.

Drag and Drop

Zatímco podpora přetahování existuje již od Honeycombu, dříve to bylo možné pouze v rámci stejné činnosti. Sněží. podporováno ve více oknech také. Zdá se, že je to implementace. většinou stejný jako předtím, s několika doplňky pro přetažení mezi aktivitami:
  • View#startDragAndDrop()
    • Nový alias pro View#startDrag().
    • Chcete-li povolit přetažení mezi aktivitami, předejte nový příznak View#DRAG_FLAG_GLOBAL.
    • Pokud potřebujete udělit oprávnění URI aktivitě příjemce, předejte nové příznaky View#DRAG_FLAG_GLOBAL_URI_READ nebo View#DRAG_FLAG_GLOBAL_URI_WRITE, podle potřeby.
  • View#updateDragShadow()
    • Nahradí stín přetažení u právě probíhající operace přetažení. Může být voláno pouze aplikací, která vyvolala operaci přetažení.
  • View#cancelDragAndDrop()
    • Zruší právě probíhající operaci přetažení. Může být voláno pouze aplikací, která vyvolala operaci přetažení.
  • Kontrola, zda zařízení podporuje režimy volného tvaru nebo obraz v obraze, je možné prostřednictvím PackageManager#hasSystemFeature(), použitím PackageManager#FEATURE_FREEFORM_WINDOW_MANAGEMENT a PackageManager#FEATURE_FREEFORM_PICTURE_IN_PICTURE respektive.
  • The android: windowBackground Atribut lze použít jako pozadí pro kreslení, pokud se velikost aktivity mění a její vykreslování se opožďuje. Li android: windowBackground je nenastavený, android: windowBackgroundFallback místo toho se používá. Příklad naleznete v ukázkové aplikaci Multi-Window Playground.
Wale nabídl několik osvědčených postupů, aby zajistil, že vaši uživatelé budou mít nejlepší možný zážitek:
  • Režim rukojeti se elegantně mění:
    • Udržujte konzistenci uživatelského rozhraní bez ohledu na orientaci. Nenechávejte prvky měnit pozice, aby umožňovaly plynulé přechody.
    • Rozšíření o výše uvedené, nepřepínejte mezi velmi odlišnými rozvrženími pro rozvržení telefonu/tabletu. Místo toho přizpůsobte rozvržení tabletu pro menší velikosti, aby byla konzistentní.
  • Ujistěte se, že se vaše aktivity přizpůsobí malým velikostem podle podle vzorů Material Design.
  • Použití FLAG_ACTIVITY_LAUNCH_ADJACENT když má smysl zajistit příjemnější zážitek v režimu rozdělené obrazovky.
  • Nekompatibilitu změny velikosti deklarujte pouze v odůvodněných případech. Jak jsme uvedli výše, jinak vaše aplikace vyniká špatným způsobem.
Wale ukončil relaci tím, že nabídl několik dalších užitečných zdrojů:
  • Dokumentace s více okny.
  • Pokyny pro Material Design pro režim rozdělené obrazovky.
  • Ukázka aplikace pro více oken.