Tarjoamme yleiskatsauksen siitä, mitä Android N: n tuleva usean ikkunan tuki tarkoittaa kehittäjille ja kuinka saada siitä paras irti!
Usean ikkunan tuki on siisti ominaisuus, jota odotamme Android N: ssä ja olemme halunneet olla saatavilla kaikilla laitteilla jo pitkään. Jotta se olisi nautinnollinen kokemus, kehittäjät saattavat kuitenkin joutua tekemään joitain muutoksia sovelluksiinsa tukeakseen sitä oikein.
Yksi Google I/O -istunnoista oli kehittäjille tarkoitettu oppimaan uusista sovellusliittymistä ja järjestelmän käyttäytymisen muutoksista, joita usean ikkunan tuki tuo mukanaan.
Istunnon esitteli Wale Ogunwale, Android ActivityManagerin tekninen pääjohtaja ja WindowManager-kehyskomponentit – hän ja hänen tiiminsä ovat vastuussa useista ikkunoista Androidissa.
Voit katsoa Usean ikkunan tilan istunto YouTubessa, mutta tarjoamme myös yleiskatsauksen istunnosta täällä.
- Jaetun näytön tila: tämä tila on oletuksena käytettävissä. Kuten nimestä voi päätellä, sen avulla voit avata kaksi sovellusta vierekkäin.
- Vapaamuotoinen tila: valmistajat voivat ottaa tämän käyttöön suuremmissa laitteissa, jolloin käyttäjät voivat vapaasti muuttaa toimintojen kokoa jaetun näytön tilan lisäksi.
- Kuva kuvassa -tila: tarkoitettu Android TV -laitteille, tämä tila on tarkoitettu videosoittimille, jotka toimivat kiinnitetyssä ikkunassa käyttäjän ollessa vuorovaikutuksessa muiden sovellusten kanssa.
android: resizeableActivity
manifestissasi oleva aktiviteettimäärite. false
. Tämä tulee tehdä vain, jos se on todella perusteltua, koska se saa sovelluksesi erottumaan aina huonosti käynnistyy koko näytön tilassa, vaikka käyttäjä (tai jokin muu sovellus) yrittäisi käynnistää sen useassa ikkunassa -tilassa. On tärkeää huomata, että juuritoiminnon attribuutit koskevat kaikkia sen tehtäväpinon toimintoja. Toisin sanoen, jos sinulla on toimintaa, jonka muut sovellukset voivat käynnistää, varmista, että se tukee usean ikkunan tilaa koska et voi taata, että muut sovellukset käynnistävät toimintasi uudessa tehtävässä käyttämällä. Intent#FLAG_ACTIVITY_NEW_TASK
.Kuva kuvassa -tilan tuki on ilmoitettava nimenomaisesti. android: supportsPictureInPicture
attribuutti. Huomaa, että tämä määrite ohitetaan, jos. android: resizeableActivity
On. false
.Layout-attribuutteja voidaan käyttää oletusmittojen ja sijoittelun asettamiseen vapaamuotoisille ikkunoille tai vähimmäisleveyden tai -korkeuden määrittämiseen sekä vapaamuotoisille että jaetuille näytöille: -
android: defaultWidth
/android: defaultHeight
: aktiviteetin oletusmitat (vapaamuotoinen tila). -
android: gravity
: toiminnon alkusijainti (vapaamuotoinen tila). -
android: minimalWidth
/android: minimalHeight
: toiminnan vähimmäismitat (vapaamuotoiset ja jaetun näytön tilat)
Aktiviteetin elinkaaren ymmärtäminen
The. toiminnan elinkaari ei muutu usean ikkunan tilassa: Tästä huolimatta jotkut hienovaraiset erot aktiivisuustilojen välillä voivat johtaa tahattomaan toimintaan, jota et normaalisti huomaa ennen N. On tärkeää tietää se.Activity#onResume()
ja. Activity#onPause()
kutsutaan, kun sovelluksesi tarkennus kasvaa tai menettää, mutta ei välttämättä, kun se alkaa tai lakkaa näkyvistä. (Muista, että vain yksi sovellus voi keskittyä kerrallaan.) Jos sovellus päivittää sisältöä jatkuvasti (esim. videon toisto), muista käsitellä sisällön päivitysten käynnistäminen ja pysäyttäminen. Activity#onStart()
ja. Activity#onStop()
sen sijaan. Näin ei tehdä esimerkiksi videosovelluksille, tarkoittaa, että toisto tapahtuu vain, jos sovellus on tarkennettu, joka kumoaa usean ikkunan tilan tarkoituksen. Virallisella YouTube-sovelluksella oli samanlainen ongelma, kun Android N Developer Preview käynnistettiin ensimmäisen kerran. Ajonaikaisten muutosten käsittely
Kun sovellus siirretään usean ikkunan tilaan, jotkin laitteen kokoonpanot muuttuvat. Voit joko sallia toiminnan käynnistymisen uudelleen (tässä tapauksessa. Fragmenttien säilyttäminen saattaa olla hyvä idea, jos toimintosi on suoritettava intensiivinen toimenpide käynnistyksen yhteydessä), tai valitse se. käsittelemään konfiguraatiomuutokset eksplisiittisesti sen sijaan. Neljä laitekokoonpanoa voi muuttua, kun siirryt moniikkunatilaan tai sen sisällä:screenSize
, smallestScreenSize
, screenLayout
ja. orientation
. Viittaavat. Android Developers -dokumentaatio saadaksesi lisätietoja kustakin määritteestä, mutta huomioi tämä. orientation
ei tarkoita tässä tapauksessa enää laitteen suuntaa. Sen sijaan se vain osoittaa, onko harjoituksesi leveys suurempi kuin sen korkeus (maisema) tai ei (pysty).Voit ilmoittaa, että toimintasi käsittelee nämä muutokset luettelosta: android: name=".MyActivity"android: configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
Muista, että tämä tarkoittaa, että sinun on itse asiassa käsiteltävä nämä muutokset. Activity#onConfigurationChanged()
, päivittämällä näkymät manuaalisesti tai lataamalla joitain resursseja uudelleen. Poistetut ominaisuudet moniikkunatilassa
Toimintasi eivät vaikuta joihinkin järjestelmän ominaisuuksiin usean ikkunan tilassa:- Tilapalkin ja navigointipalkin muutoksilla, kuten järjestelmäpalkkien himmennyksellä/piilottamisella tai immersiivisen tilan käyttämisellä, ei ole vaikutusta. Tämä on järkevää, koska toimintasi vie vain osan näytöstä.
- The
android: screenOrientation
Activity-attribuutilla ei myöskään ole vaikutusta usean ikkunan tilassa: koska aktiviteettisi kokoa voidaan muuttaa, sillä ei ole enää järkevää olla kiinteää suuntaa.
-
Activity#onMultiWindowModeChanged(boolean inMultiWindow)
: kutsutaan, kun toimintatila muuttuu koko näytön tilasta usean ikkunan tilaksi ja päinvastoin. -
Activity#onPictureInPictureModeChanged(boolean inPictureOnPicture)
: kutsutaan, kun toimintatila muuttuu PIP-tilaan/tilasta pois. -
Activity#isInMultiWindowMode()
/Activity#isInPictureInPictureMode()
: palauttaa, onko toiminto moniikkuna-/kuva kuvassa -tilassa vai ei. -
Activity#overlayWithDecorCaption(boolean overlay)
: vapaamuotoisissa ikkunoissa tätä menetelmää voidaan käyttää saamaan kuvateksti (palkki, jolla ikkunaa vedetään ympäriinsä) peittämään sisällön sen sijaan, että sitä painettaisiin alas.
Activity#overlayWithDecorCaption()
, nämä menetelmät tarjoavat myös. Fragment
luokkaa. Toimintojen aloittaminen moniikkunatilassa
-
Activity#enterPictureInPictureMode()
voidaan käyttää aktiviteetin asettamiseen kuva kuvassa -tilaan. Huomaa, että PiP-tilan toiminnoista ei ilmoiteta syöttötapahtumista – käytäMediaSession#setMediaButtonReceiver()
jos haluat hoitaa tällaisia tapahtumia. Muista myös tarkistaa Android Developers -sivusto, jos olet kiinnostunut Kuva kuvassa Android N: llä.
- Jos laite on jaetun näytön tilassa, voit käskeä järjestelmää käynnistämään toisen toiminnon sinun vieressäsi käyttämällä
Intent#FLAG_ACTIVITY_LAUNCH_ADJACENT
lippu. Lippu ei vaikuta, jos se ei ole jaetun näytön tilassa. - Jos laite on vapaamuotoisessa tilassa,
ActivityOptions#setLaunchBounds()
voidaan määrittää uuden toiminnon mitat ja sijainti näytöllä.
Raahaa ja pudota
Vaikka vedä ja pudota -tuki on ollut käytössä Honeycombista lähtien, se oli aiemmin mahdollista vain samassa toiminnassa. Se on nyt. tuettu useassa ikkunassa yhtä hyvin. Tämän toteuttaminen näyttää olevan. pääosin samat kuin ennenkin, jossa on muutamia lisäyksiä eri toimien vetämällä ja pudottamalla:View#startDragAndDrop()
- Uusi alias kohteelle
View#startDrag()
. - Ota ristiintoiminto käyttöön vetämällä ja pudottamalla ohittamalla uusi lippu
View#DRAG_FLAG_GLOBAL
. - Jos sinun on annettava URI-oikeudet vastaanottajatoiminnalle, välitä uudet liput
View#DRAG_FLAG_GLOBAL_URI_READ
taiView#DRAG_FLAG_GLOBAL_URI_WRITE
, tarvittaessa.
- Uusi alias kohteelle
View#updateDragShadow()
- Korvaa vedämisvarjon parhaillaan käynnissä olevalle vetämistoiminnolle. Voidaan kutsua vain sovellus, joka on käynnistänyt vedon.
View#cancelDragAndDrop()
- Peruuttaa parhaillaan käynnissä olevan vetämistoiminnon. Voidaan kutsua vain sovellus, joka on käynnistänyt vedon.
- Voit tarkistaa, tukeeko laite vapaamuotoista tai kuva kuvassa -tilaa
PackageManager#hasSystemFeature()
, käyttämälläPackageManager#FEATURE_FREEFORM_WINDOW_MANAGEMENT
jaPackageManager#FEATURE_FREEFORM_PICTURE_IN_PICTURE
vastaavasti.
- The
android: windowBackground
attribuuttia voidaan käyttää taustapiirtokuvana, jos aktiviteetin kokoa muutetaan ja sen renderöinti on jäljessä. Josandroid: windowBackground
on asettamatta,android: windowBackgroundFallback
käytetään sen sijaan. Katso esimerkki Multi-Window Playground -mallisovelluksesta.
- Kahvatila vaihtuu tyylikkäästi:
- Säilytä käyttöliittymän johdonmukaisuus suunnasta riippumatta. Älä anna elementtien vaihtaa paikkaa sujuvan siirtymisen mahdollistamiseksi.
- Laajenna yllä olevaa, älä vaihda hyvin erilaisten asettelujen välillä puhelimen/tabletin asetteluissa. Mukauta sen sijaan tabletin asettelua pienempiä kokoja varten johdonmukaisuuden vuoksi.
- Varmista, että toimintasi mukautuu pieniin kokoihin kirjoittaja noudattamalla materiaalisuunnittelun malleja.
- Käyttää
FLAG_ACTIVITY_LAUNCH_ADJACENT
kun on järkevää tehdä nautinnollisemmasta kokemuksesta jaetun näytön tilassa. - Ilmoita koon muuttamisen yhteensopimattomuudesta vain, jos se on perusteltua. Kuten yllä keskustelimme, sovelluksesi erottuu muuten huonosti.
- Usean ikkunan dokumentaatio.
- Materiaalisuunnittelun ohjeet jaetun näytön tilassa.
- Esimerkki monen ikkunan sovelluksesta.