Пружамо преглед онога што предстојећа подршка за више прозора у Андроид Н-у значи за програмере и како то најбоље искористити!
Подршка за више прозора је згодна функција коју чекамо у Андроиду Н и онај који смо дуго желели да буде доступан на свим уређајима. Међутим, да би то било пријатно искуство, програмери ће можда морати да унесу неке промене у своје апликације да би их исправно подржали.
Једна од Гоогле И/О сесија је била да програмери науче о новим АПИ-јима и променама понашања система које доноси подршка за више прозора.
Сесију је представио Вел Огунвел, технички водећи менаџер за Андроид АцтивитиМанагер и Компоненте оквира ВиндовМанагер - он и његов тим су они који су одговорни за више прозора на Андроид-у.
Можете гледати Сесија у режиму више прозора на ИоуТубе-у, али овде пружамо и преглед седнице.
- Режим подељеног екрана: ово је режим који је подразумевано доступан. Као што назив говори, омогућава вам да отворите две апликације једна поред друге.
- Режим слободног облика: произвођачи то могу омогућити на већим уређајима, што омогућава корисницима да слободно мењају величину активности поред режима подељеног екрана.
- Режим слика у слици: намењен Андроид ТВ уређајима, овај режим је намењен за покретање видео плејера у закаченом прозору док корисник комуницира са другим апликацијама.
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
када има смисла створити пријатније искуство у режиму подељеног екрана. - Објавите некомпатибилност промене величине само када је то оправдано. Као што смо горе расправљали, иначе се ваша апликација истиче на лош начин.
- Документација са више прозора.
- Смернице за дизајн материјала за режим подељеног екрана.
- Пример апликације са више прозора.