Ponujamo pregled tega, kaj prihajajoča podpora za več oken v sistemu Android N pomeni za razvijalce in kako to kar najbolje izkoristiti!
Podpora za več oken je odlična funkcija, ki jo čakamo v sistemu Android N in že dolgo želimo, da bi bil na voljo na vseh napravah. Da bi bilo to prijetna izkušnja, bodo morali razvijalci morda narediti nekaj sprememb v svojih aplikacijah, da jo bodo pravilno podpirali.
Ena od sej Google I/O je bila namenjena razvijalcem, da bi se seznanili z novimi API-ji in sistemskimi vedenjskimi spremembami, ki jih prinaša podpora za več oken.
Sejo sta predstavila Wale Ogunwale, vodilni tehnični vodja za Android ActivityManager in Komponente ogrodja WindowManager -- on in njegova ekipa sta odgovorna za več oken v sistemu Android.
Lahko gledate Seja načina več oken v YouTubu, vendar tukaj ponujamo tudi pregled seje.
- Način razdeljenega zaslona: to je način, ki je privzeto na voljo. Kot pove že ime, omogoča odpiranje dveh aplikacij eno ob drugi.
- Način proste oblike: proizvajalci lahko to omogočijo na večjih napravah, kar uporabnikom omogoča prosto spreminjanje velikosti dejavnosti poleg načina razdeljenega zaslona.
- Način slika v sliki: namenjen napravam Android TV, ta način je namenjen video predvajalnikom, ki se izvajajo v pripetem oknu, medtem ko uporabnik komunicira z drugimi aplikacijami.



android: resizeableActivity
atribut dejavnosti v vašem manifestu. false
. To storite le, če je resnično upravičeno, saj zaradi tega vaša aplikacija vedno izstopa na slab način zagon v celozaslonskem načinu, tudi če ga uporabnik (ali druga aplikacija) poskuša zagnati v več oknih način. Pomembno je vedeti, da atributi korenske dejavnosti veljajo za vse dejavnosti znotraj njenega sklada opravil. Z drugimi besedami, če imate dejavnost, ki jo lahko zaženejo druge aplikacije, se prepričajte, da podpira način več oken saj ne morete zagotoviti, da bodo druge aplikacije sprožile vašo dejavnost v novem opravilu z uporabo. Intent#FLAG_ACTIVITY_NEW_TASK
.Podpora za način slike v sliki mora biti izrecno deklarirana prek. android: supportsPictureInPicture
atribut. Upoštevajte, da je ta atribut prezrt, če. android: resizeableActivity
je. false
Atribute .Layout je mogoče uporabiti za nastavitev privzetih dimenzij in postavitev za okna poljubne oblike ali za določitev minimalne širine ali višine za načina poljubne oblike in načina deljenega zaslona: -
android: defaultWidth
/android: defaultHeight
: privzete dimenzije dejavnosti (način proste oblike). -
android: gravity
: začetni položaj dejavnosti (način proste oblike). -
android: minimalWidth
/android: minimalHeight
: minimalne razsežnosti dejavnosti (načina proste oblike in deljenega zaslona)
Razumevanje življenjskega cikla dejavnosti
The. življenjski cikel dejavnosti je nespremenjen v načinu več oken:
Activity#onResume()
in. Activity#onPause()
kličejo se, ko vaša aplikacija pridobi ali izgubi fokus, vendar ne nujno, ko se začne ali preneha biti vidna. (Ne pozabite, da ima lahko samo ena aplikacija v danem trenutku fokus.) Pri aplikacijah, ki nenehno posodabljajo vsebino (npr. predvajanje videa), se prepričajte, da upravljate zagon in zaustavitev posodobitev vsebine. Activity#onStart()
in. Activity#onStop()
namesto tega. Tega ne storite na primer za video aplikacije, pomeni, da bo predvajanje potekalo samo, če je aplikacija fokusirana, kar izpodbija namen načina z več okni. Uradna aplikacija YouTube je imela podobno težavo, ko je bil prvič zagnan Android N Developer Preview. Ravnanje s spremembami izvajalnega okolja
Ko je aplikacija prestavljena v način z več okni, se nekatere konfiguracije naprave spremenijo. Lahko dovolite, da se vaša dejavnost znova zažene (v tem primeru. zadrževanje fragmentov je morda dobra ideja, če mora vaša dejavnost izvajati intenzivno operacijo ob zagonu), ali pa se odločite za to. izrecno obravnavati spremembe konfiguracije namesto tega. Štiri konfiguracije naprave se lahko spremenijo ob vstopu v način več oken ali v njem:screenSize
, smallestScreenSize
, screenLayout
in. orientation
. Glejte na. Dokumentacija razvijalcev za Android za več informacij o vsakem atributu, vendar upoštevajte, da. orientation
se v tem primeru ne nanaša več na usmerjenost naprave. Namesto tega le nakazuje, ali je širina vaše dejavnosti večja od njene višine (ležeče) oz ne (pokončno). Izjavo, da bo vaša dejavnost obravnavala te spremembe, lahko storite v manifestu: android: name=".MyActivity"android: configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
Upoštevajte, da to pomeni, da boste te spremembe dejansko morali obravnavati. Activity#onConfigurationChanged()
, z ročnim posodabljanjem pogledov ali ponovnim nalaganjem nekaterih virov. Onemogočene funkcije v večokenskem načinu
Vaše dejavnosti v načinu z več okni ne bodo vplivale na nekatere sistemske funkcije:- Spremembe vrstice stanja in navigacijske vrstice, kot je zatemnitev/skrivanje sistemskih vrstic ali uporaba poglobljenega načina, ne bodo imele nobenega učinka. To je smiselno, saj vaša dejavnost zavzema le del zaslona.
- The
android: screenOrientation
atribut dejavnosti tudi nima učinka v načinu z več okni: ker bo vaši dejavnosti mogoče spreminjati velikost, ni več smiselno, da ima fiksno usmerjenost.
-
Activity#onMultiWindowModeChanged(boolean inMultiWindow)
: kliče se, ko se stanje dejavnosti spremeni iz celozaslonskega v večokensko in obratno. -
Activity#onPictureInPictureModeChanged(boolean inPictureOnPicture)
: kliče se, ko se stanje dejavnosti spremeni v/iz načina PIP. -
Activity#isInMultiWindowMode()
/Activity#isInPictureInPictureMode()
: vrne, ali je dejavnost v načinu več oken/slika v sliki ali ne. -
Activity#overlayWithDecorCaption(boolean overlay)
: za okna proste oblike lahko to metodo uporabite, da napis (vrstica, ki se uporablja za vlečenje okna) prekriva vsebino, namesto da bi jo potisnili navzdol.
Activity#overlayWithDecorCaption()
, te metode ponuja tudi. Fragment
razred. Zagon dejavnosti v večokenskem načinu
-
Activity#enterPictureInPictureMode()
lahko uporabite za prestavitev dejavnosti v način slike v sliki. Upoštevajte, da dejavnosti v načinu PiP niso obveščene o dogodkih vnosa -- uporabiteMediaSession#setMediaButtonReceiver()
če želite obvladati takšne dogodke. Preverite tudi spletno stran razvijalcev za Android, če vas zanima Slika v sliki v sistemu Android N.
- Če je naprava v načinu razdeljenega zaslona, lahko sistemu naročite, naj zažene drugo dejavnost poleg vaše, tako da uporabite
Intent#FLAG_ACTIVITY_LAUNCH_ADJACENT
zastava. Zastavica nima učinka, če ni v načinu deljenega zaslona. - Če je naprava v načinu proste oblike,
ActivityOptions#setLaunchBounds()
lahko uporabite za določitev dimenzij in lokacije nove dejavnosti na zaslonu.
Povleci in spusti
Medtem ko podpora za povleci in spusti obstaja že od Honeycomba, je bila prej mogoča le znotraj iste dejavnosti. Zdaj je. podprto v več oknih prav tako. Zdi se, da je izvajanje tega. večinoma enako kot prej, z nekaj dodatki za povleci in spusti med dejavnostmi:View#startDragAndDrop()
- Nov vzdevek za
View#startDrag()
. - Če želite omogočiti povleci in spusti med dejavnostmi, posredujte novo zastavico
View#DRAG_FLAG_GLOBAL
. - Če morate dati dovoljenja URI za dejavnost prejemnika, posredujte nove zastavice
View#DRAG_FLAG_GLOBAL_URI_READ
ozView#DRAG_FLAG_GLOBAL_URI_WRITE
, kot je primerno.
- Nov vzdevek za
View#updateDragShadow()
- Zamenja senco vlečenja za operacijo vlečenja, ki trenutno poteka. Lahko ga pokliče samo aplikacija, ki je sprožila operacijo vlečenja.
View#cancelDragAndDrop()
- Prekliče operacijo vlečenja, ki trenutno poteka. Lahko ga pokliče samo aplikacija, ki je sprožila operacijo vlečenja.
- Preverjanje, ali naprava podpira načina proste oblike ali slike v sliki, je možno prek
PackageManager#hasSystemFeature()
, z uporaboPackageManager#FEATURE_FREEFORM_WINDOW_MANAGEMENT
inPackageManager#FEATURE_FREEFORM_PICTURE_IN_PICTURE
oz.
- The
android: windowBackground
atribut se lahko uporabi kot ozadje za risanje, če se spreminja velikost dejavnosti in njeno upodabljanje zaostaja. čeandroid: windowBackground
ni nastavljen,android: windowBackgroundFallback
se uporablja namesto tega. Za primer si oglejte vzorčno aplikacijo Multi-Window Playground.
- Način ročaja se elegantno spreminja:
- Ohranite doslednost uporabniškega vmesnika ne glede na orientacijo. Elementi ne smejo spreminjati položaja, da bi omogočili gladke prehode.
- Če razširim zgoraj navedeno, ne preklapljajte med zelo različnimi postavitvami za postavitve telefona/tablice. Namesto tega prilagodite postavitev tablice za manjše velikosti zaradi skladnosti.
- Poskrbite, da bodo vaše dejavnosti prilagojene majhnim velikostim avtor po vzorcih Material Design.
- Uporaba
FLAG_ACTIVITY_LAUNCH_ADJACENT
ko je smiselno poskrbeti za prijetnejšo izkušnjo v načinu razdeljenega zaslona. - Nezdružljivost spreminjanja velikosti razglasite le, če je to upravičeno. Kot smo razpravljali zgoraj, vaša aplikacija drugače izstopa na slab način.
- Dokumentacija z več okni.
- Smernice za materialno oblikovanje za način deljenega zaslona.
- Primer aplikacije z več okni.