Pružamo pregled onoga što nadolazeća podrška za više prozora u Androidu N znači za programere i kako to najbolje iskoristiti!
Podrška za više prozora zgodna je značajka koju čekamo u Androidu N, i već dugo želimo da bude dostupan na svim uređajima. Da bi to bilo ugodno iskustvo, programeri će možda morati napraviti neke promjene u svojim aplikacijama kako bi ga ispravno podržavali.
Jedna od Google I/O sesija bila je namijenjena programerima za učenje o novim API-jima i promjenama ponašanja sustava koje donosi podrška za više prozora.
Sesiju su predstavili Wale Ogunwale, vodeći tehnički menadžer za Android ActivityManager i Komponente okvira WindowManager -- on i njegov tim odgovorni su za više prozora na Androidu.
Možete gledati Sesija s više prozora na YouTubeu, ali ovdje donosimo i pregled sjednice.
- Način rada podijeljenog zaslona: ovo je način rada koji je dostupan prema zadanim postavkama. Kao što naziv implicira, omogućuje vam otvaranje dvije aplikacije jednu do druge.
- Način slobodnog oblika: proizvođači to mogu omogućiti na većim uređajima, što korisnicima omogućuje slobodnu promjenu veličine aktivnosti uz način podijeljenog zaslona.
- Način rada slika u slici: namijenjen uređajima s Android TV-om, ovaj način rada namijenjen je za pokretanje video playera u zakačenom prozoru dok korisnik komunicira s drugim aplikacijama.
android: resizeableActivity
atribut aktivnosti u vašem manifestu. false
. To bi trebalo učiniti samo ako je doista opravdano, jer time se vaša aplikacija uvijek ističe na loš način pokretanje u načinu rada preko cijelog zaslona čak i ako je korisnik (ili druga aplikacija) pokuša pokrenuti u više prozora način rada. Važno je napomenuti da se atributi korijenske aktivnosti primjenjuju na sve aktivnosti unutar skupa zadataka. Drugim riječima, ako imate aktivnost koju mogu pokrenuti druge aplikacije, provjerite podržava li način rada s više prozora budući da ne možete jamčiti da će druge aplikacije pokrenuti vašu aktivnost u novom zadatku pomoću. Intent#FLAG_ACTIVITY_NEW_TASK
.Podrška za način rada slika u slici mora biti deklarirana eksplicitno putem. android: supportsPictureInPicture
atribut. Imajte na umu da se ovaj atribut zanemaruje ako. android: resizeableActivity
je. false
.Layout atributi mogu se koristiti za postavljanje zadanih dimenzija i položaja za prozore slobodnog oblika ili za određivanje minimalne širine ili visine i za načine slobodnog oblika i za način podijeljenog zaslona: -
android: defaultWidth
/android: defaultHeight
: zadane dimenzije aktivnosti (način slobodnog oblika). -
android: gravity
: početni položaj aktivnosti (način slobodnog oblika). -
android: minimalWidth
/android: minimalHeight
: minimalne dimenzije aktivnosti (načini slobodnog oblika i podijeljenog zaslona)
Razumijevanje životnog ciklusa aktivnosti
The. životni ciklus aktivnosti nepromijenjen je u načinu rada s više prozora: Uz to, neke suptilne razlike između stanja aktivnosti mogu rezultirati neželjenim ponašanjem koje inače ne biste primijetili prije N. Važno je to znati.Activity#onResume()
i. Activity#onPause()
pozivaju se kada vaša aplikacija dobije ili izgubi fokus, ali ne nužno kada se pokrene ili prestane biti vidljiva. (Zapamtite da samo jedna aplikacija može imati fokus u bilo kojem trenutku.) Za aplikacije koje stalno ažuriraju sadržaj (npr. reprodukcija videozapisa), pobrinite se da upravljate pokretanjem i zaustavljanjem ažuriranja sadržaja. Activity#onStart()
i. Activity#onStop()
umjesto toga. Ne čineći to za video aplikacije, na primjer, znači da će se reprodukcija dogoditi samo ako je aplikacija fokusirana, što poništava svrhu načina rada s više prozora. Službena YouTube aplikacija imala je sličan problem kada je prvi put pokrenut Android N Developer Preview. Rukovanje promjenama vremena izvođenja
Kada se aplikacija stavi u način rada s više prozora, neke će se konfiguracije uređaja promijeniti. Možete dopustiti ponovno pokretanje svoje aktivnosti (u tom slučaju. zadržavanje Fragmenata može biti dobra ideja, ako vaša aktivnost mora izvršiti intenzivnu operaciju pri pokretanju), ili odaberite to. eksplicitno obraditi promjene konfiguracije umjesto toga. Četiri konfiguracije uređaja mogu se promijeniti prilikom ulaska ili unutar načina s više prozora:screenSize
, smallestScreenSize
, screenLayout
i. orientation
. Odnosi se na. Dokumentacija za programere Androida za više informacija o svakom atributu, ali imajte na umu da. orientation
više se ne odnosi na orijentaciju uređaja u ovom slučaju. Umjesto toga, samo označava je li širina vaše aktivnosti veća od visine (pejzaž) ili ne (portret). Izjava da će vaša aktivnost obraditi ove promjene može se učiniti iz manifesta: android: name=".MyActivity"android: configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
Imajte na umu da to znači da ćete zapravo morati obraditi te promjene. Activity#onConfigurationChanged()
, ručnim ažuriranjem pogleda ili ponovnim učitavanjem nekih resursa. Onemogućene značajke u načinu rada s više prozora
Vaše aktivnosti neće utjecati na neke značajke sustava dok ste u načinu s više prozora:- Promjene statusne trake i navigacijske trake, poput zatamnjivanja/skrivanja sistemskih traka ili korištenja imerzivnog načina, neće imati učinka. Ovo ima smisla jer vaša aktivnost zauzima samo dio zaslona.
- The
android: screenOrientation
atribut aktivnosti također nema učinka u načinu rada s više prozora: budući da će vaša aktivnost moći mijenjati veličinu, više nema smisla da ima fiksnu orijentaciju.
-
Activity#onMultiWindowModeChanged(boolean inMultiWindow)
: poziva se kada se stanje aktivnosti promijeni iz cijelog zaslona u više prozora i obrnuto. -
Activity#onPictureInPictureModeChanged(boolean inPictureOnPicture)
: poziva se kada se stanje aktivnosti promijeni u/iz PIP načina. -
Activity#isInMultiWindowMode()
/Activity#isInPictureInPictureMode()
: vraća je li aktivnost u načinu rada s više prozora/slika u slici ili ne. -
Activity#overlayWithDecorCaption(boolean overlay)
: za prozore slobodnog oblika, ova se metoda može koristiti za postavljanje naslova (traka koja se koristi za povlačenje prozora) preko sadržaja umjesto da se gura prema dolje.
Activity#overlayWithDecorCaption()
, ove metode također nudi. Fragment
razreda. Pokretanje aktivnosti u načinu rada s više prozora
-
Activity#enterPictureInPictureMode()
može se koristiti za postavljanje aktivnosti u način rada slika u slici. Imajte na umu da se aktivnosti u načinu PiP ne obavještavaju o događajima unosa -- koristiteMediaSession#setMediaButtonReceiver()
ako želite rješavati takve događaje. Također svakako provjerite web stranicu Android Developers ako ste zainteresirani Slika u slici na Androidu N.
- Ako je uređaj u načinu podijeljenog zaslona, možete reći sustavu da pokrene drugu aktivnost pored vaše pomoću
Intent#FLAG_ACTIVITY_LAUNCH_ADJACENT
zastava. Zastavica nema učinka ako nije u načinu podijeljenog zaslona. - Ako je uređaj u slobodnom načinu rada,
ActivityOptions#setLaunchBounds()
može se koristiti za određivanje dimenzija i lokacije nove aktivnosti na zaslonu.
Povuci i ispusti
Dok podrška za povlačenje i ispuštanje postoji još od Honeycomba, prije je bila moguća samo unutar iste aktivnosti. Sniježi. podržano u više prozora također. Provedba ovoga čini se. uglavnom isto kao i prije, s nekoliko dodataka za povlačenje i ispuštanje između aktivnosti:View#startDragAndDrop()
- Novi alias za
View#startDrag()
. - Da biste omogućili povlačenje i ispuštanje više aktivnosti, dodajte novu zastavu
View#DRAG_FLAG_GLOBAL
. - Ako trebate dati URI dozvole za aktivnost primatelja, proslijedite nove oznake
View#DRAG_FLAG_GLOBAL_URI_READ
iliView#DRAG_FLAG_GLOBAL_URI_WRITE
, prema potrebi.
- Novi alias za
View#updateDragShadow()
- Zamjenjuje sjenu povlačenja za operaciju povlačenja koja je trenutno u tijeku. Može ga pozvati samo aplikacija koja je pokrenula operaciju povlačenja.
View#cancelDragAndDrop()
- Otkazuje operaciju povlačenja koja je trenutno u tijeku. Može ga pozvati samo aplikacija koja je pokrenula operaciju povlačenja.
- Provjera podržava li uređaj načine slobodnog oblika ili sliku u slici moguća je putem
PackageManager#hasSystemFeature()
, koristećiPackageManager#FEATURE_FREEFORM_WINDOW_MANAGEMENT
iPackageManager#FEATURE_FREEFORM_PICTURE_IN_PICTURE
odnosno.
- The
android: windowBackground
atribut se može koristiti kao pozadina koja se može crtati ako se aktivnost mijenja u veličini i njezino prikazivanje kasni. Akoandroid: windowBackground
nije postavljeno,android: windowBackgroundFallback
umjesto toga se koristi. Za primjer pogledajte oglednu aplikaciju Multi-Window Playground.
- Način ručke se elegantno mijenja:
- Održavajte dosljednost korisničkog sučelja bez obzira na orijentaciju. Neka elementi ne mijenjaju položaje kako bi omogućili glatke prijelaze.
- Proširujući gore navedeno, nemojte se prebacivati između vrlo različitih izgleda za izgled telefona/tableta. Umjesto toga prilagodite izgled tableta za manje veličine radi dosljednosti.
- Pobrinite se da se vaše aktivnosti prilagode malim veličinama po slijedeći obrasce materijalnog dizajna.
- Koristiti
FLAG_ACTIVITY_LAUNCH_ADJACENT
kada ima smisla napraviti ugodnije iskustvo u načinu podijeljenog zaslona. - Proglasite nekompatibilnost promjene veličine samo kada je to opravdano. Kao što smo već spomenuli, inače se vaša aplikacija ističe na loš način.
- Dokumentacija s više prozora.
- Smjernice materijalnog dizajna za način podijeljenog zaslona.
- Primjer aplikacije s više prozora.