Више прозора у Андроиду Н: Шта програмери треба да знају да би то искористили на најбољи начин

Пружамо преглед онога што предстојећа подршка за више прозора у Андроид Н-у значи за програмере и како то најбоље искористити!

Подршка за више прозора је згодна функција коју чекамо у Андроиду Н и онај који смо дуго желели да буде доступан на свим уређајима. Међутим, да би то било пријатно искуство, програмери ће можда морати да унесу неке промене у своје апликације да би их исправно подржали.

Једна од Гоогле И/О сесија је била да програмери науче о новим АПИ-јима и променама понашања система које доноси подршка за више прозора.

Сесију је представио Вел Огунвел, технички водећи менаџер за Андроид АцтивитиМанагер и Компоненте оквира ВиндовМанагер - он и његов тим су они који су одговорни за више прозора на Андроид-у.

Можете гледати Сесија у режиму више прозора на ИоуТубе-у, али овде пружамо и преглед седнице.

Н уводи три различита режима са више прозора:
  • Режим подељеног екрана: ово је режим који је подразумевано доступан. Као што назив говори, омогућава вам да отворите две апликације једна поред друге.
  • Режим слободног облика: произвођачи то могу омогућити на већим уређајима, што омогућава корисницима да слободно мењају величину активности поред режима подељеног екрана.
  • Режим слика у слици: намењен Андроид ТВ уређајима, овај режим је намењен за покретање видео плејера у закаченом прозору док корисник комуницира са другим апликацијама.
Андроид Н режим подељеног екранаАндроид Н ПиП режим
Вреди напоменути да. већ смо покрили више прозора на Н и понудили неке критике тренутног система. Имајући то на уму, надамо се да ће се режим слободног облика мало приближити режиму слика у слици, јер би то имало корисне апликације на свим уређајима.
Омогућавање подршке за више прозора у вашим апликацијама је једноставно: не морате ништа да радите ако већ циљате на Н. Ако одлучите да онемогућите више прозора, то можете учинити тако што ћете поставити. android: resizeableActivity атрибут активности у вашем манифесту за. false. Ово треба учинити само ако је заиста оправдано, јер то чини да се ваша апликација увек истиче на лош начин покретање у режиму целог екрана чак и ако корисник (или друга апликација) покуша да је покрене у више прозора режим. Важно је напоменути да се атрибути основне активности примењују на све активности унутар њеног скупа задатака. Другим речима, ако имате активност коју могу да покрену друге апликације, уверите се да подржава режим са више прозора јер не можете гарантовати да ће друге апликације покренути вашу активност у новом задатку користећи. Intent#FLAG_ACTIVITY_NEW_TASK .Подршка режима слика у слици мора бити експлицитно декларисана преко. android: supportsPictureInPicture атрибут. Имајте на уму да се овај атрибут игнорише ако. android: resizeableActivity је. false .Лаиоут атрибути се могу користити за постављање подразумеваних димензија и положаја за прозоре слободног облика или за одређивање минималне ширине или висине и за режиме слободног облика и за режим подељеног екрана:
  • android: defaultWidth/android: defaultHeight: подразумеване димензије активности (режим слободног облика).
  • android: gravity: почетна позиција активности (режим слободног облика).
  • android: minimalWidth/android: minimalHeight: минималне димензије активности (слободне форме и режими подељеног екрана)
Пример кода можете пронаћи у. Пример апликације Гоогле Плаигроунд са више прозора на ГитХуб-у: АндроидМанифест.кмл.
Са увођењем подршке за више прозора, можда ћете морати још једном да проверите неколико ствари у својим апликацијама да бисте били сигурни да раде исправно.

Разумевање животног циклуса активности

Тхе. животни циклус активности је непромењено у режиму са више прозора: Основни животни циклус Андроид активности Имајући то у виду, неке суптилне разлике између стања активности могу довести до ненамерног понашања које иначе не бисте приметили пре Н. Важно је то знати. Activity#onResume() и. Activity#onPause() позивају се када ваша апликација добије или изгуби фокус, али не нужно када почне или престане да буде видљива. (Запамтите да само једна апликација може да има фокус у било ком тренутку.) За апликације које стално ажурирају садржај (нпр. репродукција видео записа), водите рачуна о покретању и заустављању ажурирања садржаја. Activity#onStart() и. Activity#onStop() уместо тога. Не ради то за видео апликације, на пример, ће значити да ће до репродукције доћи само ако је апликација фокусирана, што нарушава сврху режима са више прозора. Званична ИоуТубе апликација имала је сличан проблем када је први пут покренут Андроид Н Девелопер Превиев.

Руковање променама времена извршавања

Када се апликација стави у режим са више прозора, неке конфигурације уређаја ће се променити. Можете или дозволити да се ваша активност поново покрене (у том случају. задржавање Фрагмената може бити добра идеја, ако ваша активност мора да изврши интензивну операцију при покретању), или то одлучите. експлицитно управљати променама конфигурације уместо тога. Четири конфигурације уређаја се могу променити када уђете у режим са више прозора или унутар њега: screenSize, smallestScreenSize, screenLayout и. orientation. Односи се. Документација за Андроид програмере за више информација о сваком атрибуту, али имајте на уму да. orientation у овом случају се више не односи на оријентацију уређаја. Уместо тога, само указује да ли је ширина ваше активности већа од њене висине (пејзаж) или не (портрет). Изјава да ће ваша активност управљати овим променама може да се уради из манифеста:
android: name=".MyActivity"android: configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
Имајте на уму да то значи да ћете заправо морати да се носите са овим променама. Activity#onConfigurationChanged(), ручним ажурирањем приказа или поновним учитавањем неких ресурса.

Онемогућене функције у режиму више прозора

Ваше активности неће утицати на неке функције система док сте у режиму са више прозора:
  • Промене статусне траке и траке за навигацију, као што је затамњење/сакривање системских трака или коришћење имерзивног режима, неће имати ефекта. Ово има смисла јер ваша активност заузима само део екрана.
  • Тхе android: screenOrientation Атрибут активности такође нема ефекта у режиму са више прозора: пошто ће ваша активност бити променљива, више нема смисла да има фиксну оријентацију.
Додати су нови повратни позиви за догађаје са више прозора, као и методе за испитивање тренутног стања.
  • Activity#onMultiWindowModeChanged(boolean inMultiWindow): позива се када се стање активности промени из целог екрана у више прозора и обрнуто.
  • Activity#onPictureInPictureModeChanged(boolean inPictureOnPicture): позива се када се стање активности промени у/из ПИП режима.
  • Activity#isInMultiWindowMode()/Activity#isInPictureInPictureMode(): враћа да ли је активност у режиму више прозора/слика у слици или не.
  • Activity#overlayWithDecorCaption(boolean overlay): за прозоре слободног облика, овај метод се може користити да би наслов (трака која се користи за превлачење прозора) преклопила садржај уместо да га гура надоле.
ПС. Осим. Activity#overlayWithDecorCaption(), ове методе такође пружају. Fragment класа.

Покретање активности у режиму са више прозора

  • Activity#enterPictureInPictureMode() може се користити за постављање активности у режим слика у слици. Имајте на уму да активности у режиму слике у слици не добијају обавештења о догађајима уноса – користите MediaSession#setMediaButtonReceiver() ако желите да се бавите таквим догађајима. Такође проверите веб локацију Андроид Девелоперс ако сте заинтересовани Слика у слици на Андроид Н.
  • Ако је уређај у режиму подељеног екрана, можете да кажете систему да покрене другу активност поред ваше помоћу Intent#FLAG_ACTIVITY_LAUNCH_ADJACENT застава. Застава нема ефекта ако није у режиму подељеног екрана.
  • Ако је уређај у слободном режиму, ActivityOptions#setLaunchBounds() може се користити за одређивање димензија и локације нове активности на екрану.
За примере кода, погледајте пример апликације Мулти-Виндов Плаигроунд: пример суседне активности, пример граница лансирања.

Превуци и отпусти

Иако је подршка за превлачење и испуштање присутна још од Хонеицомб-а, раније је била могућа само у оквиру исте активности. Сада је. подржано у више прозора такође. Чини се да је имплементација овога. углавном исто као и раније, са неколико додатака за превлачење и испуштање унакрсних активности:
  • View#startDragAndDrop()
    • Нови псеудоним за View#startDrag().
    • Да бисте омогућили превлачење и отпуштање унакрсних активности, проследите нову заставицу View#DRAG_FLAG_GLOBAL.
    • Ако треба да дате УРИ дозволе за активност примаоца, проследите нове заставице View#DRAG_FLAG_GLOBAL_URI_READ или View#DRAG_FLAG_GLOBAL_URI_WRITE, по потреби.
  • View#updateDragShadow()
    • Замењује сенку превлачења за операцију превлачења која је тренутно у току. Може га позвати само апликација која је покренула операцију превлачења.
  • View#cancelDragAndDrop()
    • Отказује операцију превлачења која је тренутно у току. Може га позвати само апликација која је покренула операцију превлачења.
  • Провера да ли уређај подржава режиме слободног облика или слика у слици је могућа преко PackageManager#hasSystemFeature(), Користећи PackageManager#FEATURE_FREEFORM_WINDOW_MANAGEMENT и PackageManager#FEATURE_FREEFORM_PICTURE_IN_PICTURE редом.
  • Тхе android: windowBackground атрибут се може користити као позадина која се може цртати, ако се активност мења и њено приказивање заостаје. Ако android: windowBackground није подешен, android: windowBackgroundFallback уместо тога се користи. Погледајте пример апликације за више прозора Плаигроунд.
Вел је понудио неколико најбољих пракси како би се осигурало да ваши корисници имају најбоље могуће искуство:
  • Режим руковања се мења елегантно:
    • Одржавајте доследност корисничког интерфејса без обзира на оријентацију. Не дозволите да елементи мењају положаје да бисте омогућили глатке прелазе.
    • Проширујући горе наведено, немојте се пребацивати између веома различитих изгледа за изглед телефона/таблета. Уместо тога, прилагодите изглед таблета за мање величине ради доследности.
  • Уверите се да се ваше активности прилагођавају малим величинама од стране пратећи обрасце дизајна материјала.
  • Користите FLAG_ACTIVITY_LAUNCH_ADJACENT када има смисла створити пријатније искуство у режиму подељеног екрана.
  • Објавите некомпатибилност промене величине само када је то оправдано. Као што смо горе расправљали, иначе се ваша апликација истиче на лош начин.
Вел је завршио сесију нудећи неке додатне корисне ресурсе:
  • Документација са више прозора.
  • Смернице за дизајн материјала за режим подељеног екрана.
  • Пример апликације са више прозора.