Mēs sniedzam pārskatu par to, ko izstrādātājiem nozīmēs gaidāmais vairāku logu atbalsts operētājsistēmā Android N un kā to vislabāk izmantot!
Vairāku logu atbalsts ir lieliska funkcija, ko mēs gaidām operētājsistēmā Android N un mēs jau sen vēlējāmies, lai tas būtu pieejams visās ierīcēs. Tomēr, lai tā būtu patīkama pieredze, izstrādātājiem, iespējams, būs jāveic dažas izmaiņas savās lietotnēs, lai to pareizi atbalstītu.
Viena no Google I/O sesijām bija paredzēta izstrādātājiem, lai uzzinātu par jaunajiem API un sistēmas uzvedības izmaiņām, ko sniedz vairāku logu atbalsts.
Sesiju prezentēja Wale Ogunwale, Android ActivityManager tehniskais vadītājs un WindowManager ietvara komponenti — viņš un viņa komanda ir atbildīgi par vairāku logu izmantošanu operētājsistēmā Android.
Jūs varat skatīties Vairāku logu režīma sesija pakalpojumā YouTube, bet šeit sniedzam arī sesijas pārskatu.
- Sadalītā ekrāna režīms: šis ir režīms, kas ir pieejams pēc noklusējuma. Kā norāda nosaukums, tas ļauj atvērt divas lietojumprogrammas blakus.
- Brīvas formas režīms: ražotāji to var iespējot lielākās ierīcēs, kas ļauj lietotājiem brīvi mainīt darbību izmērus papildus dalītā ekrāna režīmam.
- Attēls attēlā režīms: paredzēts Android TV ierīcēm. Šis režīms ir paredzēts video atskaņotājiem, kas darbojas piespraustā logā, kamēr lietotājs mijiedarbojas ar citām lietojumprogrammām.
android: resizeableActivity
aktivitātes atribūts jūsu manifestā. false
. Tas jādara tikai tad, ja tas ir patiesi pamatots, jo tas vienmēr liek jūsu lietotnei izcelties palaišana pilnekrāna režīmā pat tad, ja lietotājs (vai cita lietotne) mēģina to palaist vairākos logos režīmā. Ir svarīgi ņemt vērā, ka saknes aktivitātes atribūti attiecas uz visām darbībām tās uzdevumu stekā. Citiem vārdiem sakot, ja jums ir darbība, ko var sākt citas lietotnes, pārliecinieties, vai tā atbalsta vairāku logu režīmu. jo jūs nevarat garantēt, ka citas lietotnes sāks jūsu darbības jaunā uzdevumā, izmantojot. Intent#FLAG_ACTIVITY_NEW_TASK
.Attēls attēlā režīma atbalsts ir skaidri jāpaziņo, izmantojot. android: supportsPictureInPicture
atribūts. Ņemiet vērā, ka šis atribūts tiek ignorēts, ja. android: resizeableActivity
ir. false
.Layout atribūtus var izmantot, lai iestatītu noklusējuma izmērus un izvietojumu brīvas formas logiem vai norādītu minimālo platumu vai augstumu gan brīvas formas, gan dalīta ekrāna režīmiem: -
android: defaultWidth
/android: defaultHeight
: aktivitātes noklusējuma izmēri (brīvās formas režīms). -
android: gravity
: aktivitātes sākuma pozīcija (brīvās formas režīms). -
android: minimalWidth
/android: minimalHeight
: aktivitātes minimālie izmēri (brīvas formas un dalītā ekrāna režīmi)
Izpratne par aktivitātes dzīves ciklu
The. aktivitātes dzīves cikls ir nemainīgs vairāku logu režīmā: Tomēr dažas smalkas atšķirības starp aktivitātes stāvokļiem var izraisīt neparedzētu uzvedību, ko parasti nepamanītu pirms N. Ir svarīgi to zināt.Activity#onResume()
un. Activity#onPause()
tiek izsaukti, kad jūsu lietotne iegūst vai zaudē fokusu, bet ne vienmēr, kad tā sāk vai pārstāj būt redzama. (Ņemiet vērā, ka jebkurā brīdī fokuss var būt tikai vienai lietotnei.) Lietojumprogrammām, kas pastāvīgi atjaunina saturu (piemēram, video atskaņošana), noteikti veiciet satura atjaunināšanas sākšanu un apturēšanu. Activity#onStart()
un. Activity#onStop()
vietā. Tas netiek darīts, piemēram, video lietotnēm, nozīmē, ka atskaņošana notiks tikai tad, ja lietotne ir fokusēta, kas pārspēj vairāku logu režīma mērķi. Oficiālajā YouTube lietotnē bija līdzīga problēma, kad pirmo reizi tika palaists Android N izstrādātāja priekšskatījums. Izpildlaika izmaiņu apstrāde
Kad lietotne tiek ieslēgta vairāku logu režīmā, dažas ierīces konfigurācijas mainīsies. Varat atļaut savu darbību atsākt (tādā gadījumā. saglabājot Fragmentus varētu būt laba ideja, ja jūsu darbībai startēšanas laikā jāveic intensīva darbība), vai arī izvēlieties to. skaidri apstrādāt konfigurācijas izmaiņas vietā. Ieejot vairāku logu režīmā vai tajā var mainīties četras ierīces konfigurācijas:screenSize
, smallestScreenSize
, screenLayout
un. orientation
. Skatiet uz. Android izstrādātāju dokumentācija lai iegūtu vairāk informācijas par katru atribūtu, taču ņemiet vērā to. orientation
šajā gadījumā vairs neattiecas uz ierīces orientāciju. Tā vietā tas tikai norāda, vai jūsu aktivitātes platums ir lielāks par tās augstumu (ainava) vai nav (portrets).Paziņot, ka jūsu darbība apstrādās šīs izmaiņas, var veikt manifestā: android: name=".MyActivity"android: configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
Ņemiet vērā, ka tas nozīmē, ka jums būs jārisina šīs izmaiņas. Activity#onConfigurationChanged()
, manuāli atjauninot skatus vai atkārtoti ielādējot dažus resursus. Atspējotas funkcijas vairāku logu režīmā
Vairāku logu režīmā jūsu darbības neietekmēs dažas sistēmas funkcijas.- Statusa joslas un navigācijas joslas izmaiņām, piemēram, aptumšot/slēpjot sistēmas joslas vai izmantojot ieskaujošo režīmu, nebūs nekādas ietekmes. Tas ir loģiski, jo jūsu darbības aizņem tikai daļu no ekrāna.
- The
android: screenOrientation
aktivitātes atribūtam nav nekādas ietekmes arī vairāku logu režīmā: tā kā jūsu aktivitātes lielums būs maināms, vairs nav jēgas, ka tai ir noteikta orientācija.
-
Activity#onMultiWindowModeChanged(boolean inMultiWindow)
: tiek izsaukts, kad aktivitātes stāvoklis mainās no pilnekrāna uz vairāku logu režīmu un otrādi. -
Activity#onPictureInPictureModeChanged(boolean inPictureOnPicture)
: izsauc, kad aktivitātes stāvoklis mainās uz/no PIP režīma. -
Activity#isInMultiWindowMode()
/Activity#isInPictureInPictureMode()
: atgriezt, vai darbība ir vairāku logu/attēls attēlā režīmā vai nē. -
Activity#overlayWithDecorCaption(boolean overlay)
: brīvas formas logiem šo metodi var izmantot, lai parakstu (joslu, ko izmanto loga vilkšanai) pārklātu ar saturu, nevis nospiestu to uz leju.
Activity#overlayWithDecorCaption()
, šīs metodes nodrošina arī. Fragment
klasē. Darbību sākšana vairāku logu režīmā
-
Activity#enterPictureInPictureMode()
var izmantot, lai iestatītu darbību attēla attēlā režīmā. Ņemiet vērā, ka par darbībām attēla attēlā režīmā netiek paziņots par ievades notikumiem — lietojumsMediaSession#setMediaButtonReceiver()
ja vēlaties risināt šādus notikumus. Noteikti pārbaudiet arī Android izstrādātāju vietni, ja jūs interesē Attēls attēlā operētājsistēmā Android N.
- Ja ierīce ir sadalīta ekrāna režīmā, varat likt sistēmai uzsākt citu darbību blakus jūsu darbībai, izmantojot
Intent#FLAG_ACTIVITY_LAUNCH_ADJACENT
karogs. Karogam nav nekādas ietekmes, ja tas nav sadalīta ekrāna režīmā. - Ja ierīce ir brīvas formas režīmā,
ActivityOptions#setLaunchBounds()
var izmantot, lai norādītu jaunās aktivitātes izmērus un atrašanās vietu ekrānā.
Vilkt un nomest
Lai gan vilkšanas un nomešanas atbalsts pastāv kopš Honeycomb, iepriekš tas bija iespējams tikai vienas darbības ietvaros. Tas ir tagad. atbalstīts vairākos logos arī. Šķiet, ka tas ir jāīsteno. pārsvarā tāds pats kā iepriekš, ar dažiem papildinājumiem savstarpējās darbības vilkšanai un nomešanai:View#startDragAndDrop()
- Jauns aizstājvārds
View#startDrag()
. - Lai iespējotu pārrobežu darbību, velciet un nometiet, nododiet jauno karogu
View#DRAG_FLAG_GLOBAL
. - Ja jums ir jāpiešķir URI atļaujas adresāta darbībai, nododiet jaunos karogus
View#DRAG_FLAG_GLOBAL_URI_READ
vaiView#DRAG_FLAG_GLOBAL_URI_WRITE
, pēc vajadzības.
- Jauns aizstājvārds
View#updateDragShadow()
- Aizstāj vilkšanas ēnu pašlaik notiekošajai vilkšanas darbībai. To var izsaukt tikai tā lietotne, kas izraisīja vilkšanas darbību.
View#cancelDragAndDrop()
- Atceļ pašlaik notiekošo vilkšanas darbību. To var izsaukt tikai tā lietotne, kas izraisīja vilkšanas darbību.
- Pārbaudīt, vai ierīce atbalsta brīvas formas vai attēlu attēlā režīmus, ir iespējams, izmantojot
PackageManager#hasSystemFeature()
, izmantojotPackageManager#FEATURE_FREEFORM_WINDOW_MANAGEMENT
unPackageManager#FEATURE_FREEFORM_PICTURE_IN_PICTURE
attiecīgi.
- The
android: windowBackground
atribūtu var izmantot kā fona zīmējumu, ja aktivitātes lielums tiek mainīts un tās renderēšana atpaliek. Jaandroid: windowBackground
ir atiestatīts,android: windowBackgroundFallback
vietā tiek izmantots. Skatiet piemēru Multi-Window Playground lietotnes paraugā.
- Roktura režīms mainās eleganti:
- Saglabājiet lietotāja interfeisa konsekvenci neatkarīgi no orientācijas. Neļaujiet elementiem mainīt pozīcijas, lai nodrošinātu vienmērīgas pārejas.
- Paplašinot iepriekš minēto, nepārslēdzieties starp ļoti dažādiem tālruņu/planšetdatoru izkārtojumiem. Tā vietā pielāgojiet planšetdatora izkārtojumu mazākiem izmēriem, lai nodrošinātu konsekvenci.
- Pārliecinieties, ka jūsu aktivitātes ir piemērotas maziem izmēriem autors ievērojot materiālu dizaina modeļus.
- Izmantot
FLAG_ACTIVITY_LAUNCH_ADJACENT
kad ir jēga radīt patīkamāku pieredzi dalīta ekrāna režīmā. - Paziņojiet par izmēru maiņas nesaderību tikai tad, ja tas ir pamatoti. Kā mēs apspriedām iepriekš, pretējā gadījumā jūsu lietotne tiek sliktā veidā izcelta.
- Vairāku logu dokumentācija.
- Materiālu dizaina vadlīnijas dalītā ekrāna režīmam.
- Vairāku logu lietotnes paraugs.