Anname ülevaate sellest, mida Android N eelseisev mitme akna tugi arendajatele tähendab ja kuidas sellest maksimumi võtta!
Mitme akna tugi on kena funktsioon, mida ootame Android N-s ja oleme juba pikka aega soovinud, et see oleks kõikides seadmetes saadaval. Kuid selleks, et see oleks nauditav kogemus, peavad arendajad selle õigeks toetamiseks oma rakendustes mõningaid muudatusi tegema.
Üks Google'i I/O seanssidest oli arendajatele mõeldud uute API-de ja süsteemi käitumismuutuste kohta, mida pakub mitme akna tugi.
Seansi esitles Wale Ogunwale, Android ActivityManageri tehniline juhtjuht ja WindowManageri raamistiku komponendid – tema ja tema meeskond vastutavad Androidi mitme akna eest.
Saate vaadata Mitme akna režiimi seanss YouTube'is, aga anname siin ka ülevaate seansist.
- Jagatud ekraani režiim: see on vaikimisi saadaval olev režiim. Nagu nimigi ütleb, võimaldab see avada kaks rakendust kõrvuti.
- Vabakujuline režiim: tootjad saavad seda lubada suuremates seadmetes, mis võimaldab kasutajatel lisaks jagatud ekraani režiimile tegevuste suurust vabalt muuta.
- Pilt-pildis režiim: mõeldud Android TV seadmetele, see režiim on mõeldud videopleieritele, mis töötavad kinnitatud aknas, kui kasutaja suhtleb teiste rakendustega.
android: resizeableActivity
tegevuse atribuut teie manifestis. false
. Seda tuleks teha ainult siis, kui see on tõesti õigustatud, kuna see muudab teie rakenduse alati halvasti silmapaistvaks täisekraanirežiimis käivitamine isegi siis, kui kasutaja (või mõni muu rakendus) proovib seda käivitada mitmes aknas režiimis. Oluline on märkida, et juurtegevuse atribuudid kehtivad kõikidele selle ülesandevirna kuuluvatele tegevustele. Teisisõnu, kui teil on tegevus, mida teised rakendused saavad käivitada, veenduge, et see toetaks mitme akna režiimi kuna te ei saa garanteerida, et teised rakendused käivitavad teie tegevuse uues ülesandes kasutades. Intent#FLAG_ACTIVITY_NEW_TASK
Pilt-pildis režiimi tugi peab olema sõnaselgelt deklareeritud rakenduse kaudu. android: supportsPictureInPicture
atribuut. Pange tähele, et seda atribuuti ignoreeritakse, kui. android: resizeableActivity
on. false
.Layout atribuute saab kasutada vabakujuliste akende vaikemõõtmete ja paigutuse määramiseks või minimaalse laiuse või kõrguse määramiseks nii vabakujuliste kui ka jagatud ekraani režiimide jaoks: -
android: defaultWidth
/android: defaultHeight
: tegevuse vaikemõõtmed (vabakujuline režiim). -
android: gravity
: tegevuse algpositsioon (vabakujuline režiim). -
android: minimalWidth
/android: minimalHeight
: tegevuse minimaalsed mõõtmed (vabakujuline ja jagatud ekraani režiim)
Tegevuse elutsükli mõistmine
The. tegevuse elutsükkel on mitme akna režiimis muutumatu: Sellegipoolest võivad mõned väikesed erinevused aktiivsusolekute vahel põhjustada tahtmatut käitumist, mida te tavaliselt enne N ei märkaks. Seda on oluline teada.Activity#onResume()
ja. Activity#onPause()
kutsutakse välja siis, kui teie rakendus fookuse saab või kaotab, kuid mitte tingimata siis, kui see hakkab nähtavaks muutuma või lõpetab selle. (Pidage meeles, et korraga võib fookuses olla ainult üks rakendus.) Rakenduste puhul, mis värskendavad sisu pidevalt (nt video taasesitus), tehke kindlasti sisu värskenduste käivitamine ja peatamine. Activity#onStart()
ja. Activity#onStop()
selle asemel. Ei tee seda näiteks videorakenduste puhul, tähendab, et taasesitus toimub ainult siis, kui rakendus on teravustatud, mis kaotab mitme akna režiimi eesmärgi. Ametlikul YouTube'i rakendusel oli sarnane probleem Android N Developer Preview esmakordsel käivitamisel. Käitusaja muudatuste käsitlemine
Kui rakendus lülitatakse mitme akna režiimi, muutuvad mõned seadme konfiguratsioonid. Võite lubada oma tegevuse taaskäivitada (sel juhul. fragmentide säilitamine võib olla hea mõte, kui teie tegevus peab käivitamisel läbi viima intensiivse toimingu) või valige see. konfiguratsioonimuudatusi selgesõnaliselt käsitlema selle asemel. Mitme akna režiimi sisenemisel või sees võivad muutuda neli seadme konfiguratsiooni:screenSize
, smallestScreenSize
, screenLayout
ja. orientation
. Vaadake. Androidi arendajate dokumentatsioon iga atribuudi kohta lisateabe saamiseks, kuid pange tähele. orientation
ei viita antud juhul enam seadme orientatsioonile. Selle asemel näitab see lihtsalt, kas teie tegevuse laius on suurem kui selle kõrgus (maastik) või mitte (portree).Manifestist saab teada, et teie tegevus käsitleb neid muudatusi. android: name=".MyActivity"android: configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
Pidage meeles, et see tähendab, et peate nende muudatustega tegelikult hakkama saama. Activity#onConfigurationChanged()
vaateid käsitsi värskendades või mõnda ressurssi uuesti laadides. Mitme akna režiimis keelatud funktsioonid
Teie tegevused ei mõjuta mitme akna režiimis teatud süsteemifunktsioone.- Olekuriba ja navigeerimisriba muudatused, nagu süsteemiribade hämardamine/peitmine või ümbritseva režiimi kasutamine, ei mõjuta. See on mõistlik, kuna teie tegevus hõlmab ainult osa ekraanist.
- The
android: screenOrientation
tegevuse atribuudil pole ka mitme akna režiimis mingit mõju: kuna teie tegevuse suurust saab muuta, pole enam mõtet, et sellel oleks kindel orientatsioon.
-
Activity#onMultiWindowModeChanged(boolean inMultiWindow)
: kutsutakse välja, kui tegevuse olek muutub täisekraanilt mitme akna olekuks ja vastupidi. -
Activity#onPictureInPictureModeChanged(boolean inPictureOnPicture)
: kutsutakse välja, kui tegevuse olek muutub PIP-režiimiks/režiimist välja. -
Activity#isInMultiWindowMode()
/Activity#isInPictureInPictureMode()
: tagastab, kas tegevus on mitme akna/pilt-pildis režiimis või mitte. -
Activity#overlayWithDecorCaption(boolean overlay)
: vabakujuliste akende puhul saab seda meetodit kasutada pealkirja (akna lohistamiseks kasutatav riba) sisu katmiseks, selle asemel et seda alla suruda.
Activity#overlayWithDecorCaption()
, pakub neid meetodeid ka. Fragment
klass. Toimingute käivitamine mitme akna režiimis
-
Activity#enterPictureInPictureMode()
saab kasutada tegevuse pilt-pildis režiimi panemiseks. Pange tähele, et režiimis PiP toimingutest ei teavitata sisendsündmustest – kasutusestMediaSession#setMediaButtonReceiver()
kui soovite selliseid üritusi korraldada. Kui olete huvitatud, vaadake kindlasti ka Androidi arendajate veebisaiti Pilt-pildis Android N-s.
- Kui seade on jagatud ekraani režiimis, saate käsuga käskida süsteemil käivitada teie kõrval muu tegevuse
Intent#FLAG_ACTIVITY_LAUNCH_ADJACENT
lipp. Lipul pole mõju, kui see pole jagatud ekraani režiimis. - Kui seade on vabakujulises režiimis,
ActivityOptions#setLaunchBounds()
saab kasutada uue tegevuse mõõtmete ja asukoha määramiseks ekraanil.
Tõmba ja lase lahti
Kui pukseerimise tugi on olnud olemas alates Honeycombist, siis varem oli see võimalik ainult sama tegevuse raames. See on nüüd. toetatud mitmes aknas samuti. Selle rakendamine tundub olevat. enamjaolt sama mis enne, millel on mõned täiendused risttegevuseks pukseerimiseks:View#startDragAndDrop()
- Uus pseudonüüm
View#startDrag()
. - Risttegevuste pukseerimise lubamiseks edastage uus lipp
View#DRAG_FLAG_GLOBAL
. - Kui peate andma adressaadi tegevusele URI-õigused, edastage uued lipud
View#DRAG_FLAG_GLOBAL_URI_READ
võiView#DRAG_FLAG_GLOBAL_URI_WRITE
, vastavalt vajadusele.
- Uus pseudonüüm
View#updateDragShadow()
- Asendab parajasti poolelioleva lohistamistoimingu lohistamise varju. Saab helistada ainult rakendus, mis käivitas lohistamistoimingu.
View#cancelDragAndDrop()
- Tühistab käimasoleva lohistamise. Saab helistada ainult rakendus, mis käivitas lohistamistoimingu.
- Kontrollida, kas seade toetab vabakujulist või pilt-pildis režiimi, on võimalik läbi
PackageManager#hasSystemFeature()
, kasutadesPackageManager#FEATURE_FREEFORM_WINDOW_MANAGEMENT
jaPackageManager#FEATURE_FREEFORM_PICTURE_IN_PICTURE
vastavalt.
- The
android: windowBackground
atribuuti saab kasutada tausta joonistamisena, kui tegevuse suurust muudetakse ja selle renderdamine jääb maha. Kuiandroid: windowBackground
on seadmata,android: windowBackgroundFallback
selle asemel kasutatakse. Vaadake näidet Multi-Window Playgroundi näidisrakendusest.
- Käepideme režiim muutub elegantselt:
- Säilitage kasutajaliidese järjepidevus olenemata orientatsioonist. Ärge laske elementidel sujuvate üleminekute võimaldamiseks positsioone muuta.
- Ülaltoodut laiendades, ära vaheta telefoni/tahvelarvuti paigutuste puhul väga erinevate paigutuste vahel. Selle asemel kohandage tahvelarvuti paigutust väiksemate suuruste jaoks järjepidevuse tagamiseks.
- Veenduge, et teie tegevused sobiksid väikeste suurustega kõrval järgides materjalidisaini mustreid.
- Kasutage
FLAG_ACTIVITY_LAUNCH_ADJACENT
kui on mõttekas teha jagatud ekraani režiimis nauditavam kogemus. - Teatage suuruse muutmise kokkusobimatust ainult siis, kui see on põhjendatud. Nagu me eespool arutasime, muudab see teie rakenduse muul viisil halvasti silma paista.
- Mitme akna dokumentatsioon.
- Materjali disaini juhised jagatud ekraani režiimi jaoks.
- Mitme akna rakenduse näidis.