Kelių langų sistema „Android N“: ką kūrėjai turi žinoti, kad išnaudotų visas galimybes

Pateikiame apžvalgą, ką būsimasis kelių langų palaikymas sistemoje „Android N“ reiškia kūrėjams ir kaip išnaudoti visas galimybes!

Kelių langų palaikymas yra puiki funkcija, kurios laukiame „Android N“ ir kurį jau seniai norėjome pasiekti visuose įrenginiuose. Tačiau, kad tai būtų maloni patirtis, kūrėjams gali tekti atlikti kai kuriuos savo programų pakeitimus, kad jie tinkamai veiktų.

Viena iš „Google“ įvesties / išvesties sesijų buvo skirta kūrėjams sužinoti apie naujas API ir sistemos elgesio pokyčius, kuriuos suteikia kelių langų palaikymas.

Sesiją pristatė Wale'as Ogunwale'as, „Android ActivityManager“ techninis vadovas ir „WindowManager“ sistemos komponentai – jis ir jo komanda yra atsakingi už kelių langų veikimą „Android“.

Galite žiūrėti Kelių langų režimo sesija „YouTube“., bet čia taip pat pateikiame seanso apžvalgą.

N pristato tris skirtingus kelių langų režimus:
  • Padalinto ekrano režimas: tai režimas, kuris pasiekiamas pagal numatytuosius nustatymus. Kaip rodo pavadinimas, jis leidžia atidaryti dvi programas greta.
  • Laisvos formos režimas: gamintojai gali tai įjungti didesniuose įrenginiuose, todėl naudotojai gali laisvai keisti veiklos dydį, be padalyto ekrano režimo.
  • Vaizdas vaizde režimas: skirtas „Android TV“ įrenginiams, šis režimas skirtas vaizdo grotuvams veikti prisegtame lange, kai vartotojas sąveikauja su kitomis programomis.
„Android N“ padalinto ekrano režimasAndroid N PiP režimas
Verta atkreipti dėmesį į tai. Jau anksčiau aptarėme kelių langų sistemą N ir kritikavome dabartinę sistemą. Turėdami tai omenyje, tikimės, kad laisvos formos režimas šiek tiek priartės prie vaizdo vaizde režimo, nes tai turėtų naudingų programų visuose įrenginiuose.
Įgalinti kelių langų palaikymą programose paprasta: jums nereikia nieko daryti, jei jau taikote pagal N. Jei norite išjungti kelių langų funkciją, tai galite padaryti nustatydami. android: resizeableActivity veiklos atributas jūsų manifeste. false. Tai turėtų būti daroma tik tuo atveju, jei tai tikrai pagrįsta, nes dėl to jūsų programa visada išsiskiria iš kitų paleisti viso ekrano režimu, net jei vartotojas (ar kita programa) bando ją paleisti keliuose languose režimu. Svarbu pažymėti, kad pagrindinės veiklos atributai taikomi visoms veikloms, esančioms jos užduočių krūvoje. Kitaip tariant, jei turite veiklą, kurią gali pradėti kitos programos, įsitikinkite, kad ji palaiko kelių langų režimą nes negalite garantuoti, kad kitos programos pradės jūsų veiklą naujoje užduotyje naudodami. Intent#FLAG_ACTIVITY_NEW_TASK .Vaizdas vaizde režimo palaikymas turi būti aiškiai deklaruotas per. android: supportsPictureInPicture atributas. Atminkite, kad šis atributas yra ignoruojamas, jei. android: resizeableActivity yra. false .Layout atributus galima naudoti norint nustatyti numatytuosius laisvos formos langų matmenis ir vietą arba nurodyti minimalų plotį ar aukštį laisvos formos ir padalyto ekrano režimams:
  • android: defaultWidth/android: defaultHeight: numatytieji veiklos matmenys (laisvos formos režimas).
  • android: gravity: pradinė veiklos padėtis (laisvos formos režimas).
  • android: minimalWidth/android: minimalHeight: minimalūs veiklos matmenys (laisvos formos ir padalinto ekrano režimai)
Kodo pavyzdį galite rasti. „Google“ kelių langų žaidimų aikštelės pavyzdinė programa „GitHub“: AndroidManifest.xml.
Įdiegus kelių langų palaikymą, gali tekti dar kartą patikrinti keletą dalykų programose, kad įsitikintumėte, jog jos veikia tinkamai.

Veiklos gyvavimo ciklo supratimas

The. veiklos gyvavimo ciklas yra nepakitęs kelių langų režimu: „Android Activity Basic“ gyvavimo ciklas Nepaisant to, kai kurie subtilūs veiklos būsenų skirtumai gali sukelti nenumatytą elgesį, kurio paprastai nepastebėtumėte anksčiau nei N. Svarbu tai žinoti. Activity#onResume() ir. Activity#onPause() yra iškviečiami, kai programa suaktyvėja arba praranda dėmesį, bet nebūtinai, kai ji pradedama arba nustoja būti matoma. (Atminkite, kad vienu metu gali būti sufokusuota tik viena programa.) Programoms, kurios nuolat atnaujina turinį (pvz., vaizdo įrašų atkūrimas), būtinai paleiskite ir sustabdykite turinio naujinimus. Activity#onStart() ir. Activity#onStop() vietoj to. Pavyzdžiui, tai nedaroma vaizdo įrašų programoms, reikš, kad atkūrimas vyks tik tada, kai programa bus sufokusuota, kuris nugali kelių langų režimo tikslą. Oficiali „YouTube“ programa turėjo panašią problemą, kai pirmą kartą buvo paleista „Android N“ kūrėjo peržiūra.

Vykdymo laiko pakeitimų tvarkymas

Kai programa įjungiama į kelių langų režimą, kai kurios įrenginio konfigūracijos pasikeis. Galite leisti iš naujo pradėti veiklą (tokiu atveju. išlaikant Fragmentus gali būti gera idėja, jei jūsų veikla turi atlikti intensyvią operaciją paleidžiant) arba pasirinkti. aiškiai tvarkyti konfigūracijos pakeitimus vietoj to. Keturios įrenginio konfigūracijos gali pasikeisti įjungiant kelių langų režimą arba jį naudojant: screenSize, smallestScreenSize, screenLayout ir. orientation. Žr. „Android“ kūrėjų dokumentacija Norėdami gauti daugiau informacijos apie kiekvieną atributą, tačiau atkreipkite dėmesį į tai. orientation šiuo atveju neberodo įrenginio orientacijos. Vietoj to, jis tik nurodo, ar jūsų veiklos plotis yra didesnis nei jos aukštis (kraštovaizdis) arba ne (portretas).Pareikšti, kad jūsų veikla apdoros šiuos pakeitimus, galite atlikti apraše:
android: name=".MyActivity"android: configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
Atminkite, kad tai reiškia, kad iš tikrųjų turėsite atlikti šiuos pakeitimus. Activity#onConfigurationChanged(), rankiniu būdu atnaujinant rodinius arba iš naujo įkeliant kai kuriuos išteklius.

Išjungtos funkcijos kelių langų režimu

Kai kurios sistemos funkcijos neturės įtakos jūsų veiklai kelių langų režimu:
  • Būsenos juostos ir naršymo juostos pakeitimai, tokie kaip sistemos juostų pritemdymas / slėpimas arba įtraukiančio režimo naudojimas, neturės jokios įtakos. Tai prasminga, nes jūsų veikla užima tik dalį ekrano.
  • The android: screenOrientation Veiklos atributas taip pat neturi jokios įtakos kelių langų režimu: kadangi jūsų veiklos dydis bus keičiamas, nebėra prasmės, kad ji būtų fiksuota.
Pridėta naujų kelių langų įvykių atgalinių skambučių, taip pat dabartinės būsenos užklausos metodai.
  • Activity#onMultiWindowModeChanged(boolean inMultiWindow): iškviečiama, kai veiklos būsena pakeičiama iš viso ekrano į kelių langų režimą ir atvirkščiai.
  • Activity#onPictureInPictureModeChanged(boolean inPictureOnPicture): iškviečiamas, kai veiklos būsena pasikeičia į PIP režimą arba iš jo.
  • Activity#isInMultiWindowMode()/Activity#isInPictureInPictureMode(): grąžinkite, nesvarbu, ar veikla yra kelių langų/vaizdas vaizde režimu, ar ne.
  • Activity#overlayWithDecorCaption(boolean overlay): laisvos formos langams šis metodas gali būti naudojamas norint, kad antraštė (juosta, naudojama langui vilkti) perdengtų turinį, o ne stumtų žemyn.
PS. Išskyrus. Activity#overlayWithDecorCaption(), šiuos metodus taip pat teikia. Fragment klasė.

Veiklos pradžia kelių langų režimu

  • Activity#enterPictureInPictureMode() gali būti naudojamas norint perkelti veiklą į vaizdo vaizde režimą. Atminkite, kad veikla PiP režimu negaunama pranešimų apie įvesties įvykius – naudojimas MediaSession#setMediaButtonReceiver() jei norite tvarkyti tokius įvykius. Taip pat būtinai apsilankykite „Android“ kūrėjų svetainėje, jei domitės Vaizdas paveikslėlyje „Android N“..
  • Jei įrenginys veikia padalinto ekrano režimu, galite nurodyti sistemai pradėti kitą veiklą šalia jūsų, naudodami Intent#FLAG_ACTIVITY_LAUNCH_ADJACENT vėliava. Vėliava neveikia, jei ne padalyto ekrano režimu.
  • Jei įrenginys veikia laisvos formos režimu, ActivityOptions#setLaunchBounds() galima naudoti norint nurodyti naujos veiklos matmenis ir vietą ekrane.
Kodo pavyzdžių ieškokite kelių langų žaidimų aikštelės pavyzdinėje programoje: gretimos veiklos pavyzdys, paleidimo ribų pavyzdys.

Tempti ir paleisti

Nors „vilkimo ir numetimo“ palaikymas teikiamas nuo „Honeycomb“, anksčiau tai buvo įmanoma tik vykdant tą pačią veiklą. Tai sniegas. palaikoma kelių langų režimu taip pat. Atrodo, kad tai įgyvendinti. dažniausiai tokie patys kaip ir anksčiau, su keletu priedų, skirtų įvairioms veikloms nuvilkti:
  • View#startDragAndDrop()
    • Naujas slapyvardis View#startDrag().
    • Norėdami įgalinti kryžminę veiklą, nuvilkite ir numeskite, perduokite naują vėliavėlę View#DRAG_FLAG_GLOBAL.
    • Jei reikia suteikti URI leidimus gavėjo veiklai, perduokite naujas vėliavėles View#DRAG_FLAG_GLOBAL_URI_READ arba View#DRAG_FLAG_GLOBAL_URI_WRITE, kaip pridera.
  • View#updateDragShadow()
    • Pakeičia šiuo metu vykdomos vilkimo operacijos vilkimo šešėlį. Gali iškviesti tik programa, sukūrusi vilkimo operaciją.
  • View#cancelDragAndDrop()
    • Atšaukia šiuo metu vykdomą vilkimo operaciją. Gali iškviesti tik programa, sukūrusi vilkimo operaciją.
  • Patikrinti, ar įrenginys palaiko laisvos formos arba vaizdo vaizde režimus, galima naudojant PackageManager#hasSystemFeature(), naudojant PackageManager#FEATURE_FREEFORM_WINDOW_MANAGEMENT ir PackageManager#FEATURE_FREEFORM_PICTURE_IN_PICTURE atitinkamai.
  • The android: windowBackground atributas gali būti naudojamas kaip fono piešinys, jei keičiamas veiklos dydis ir jos atvaizdavimas atsilieka. Jeigu android: windowBackground yra nenustatytas, android: windowBackgroundFallback naudojamas vietoj. Pavyzdį rasite kelių langų žaidimų aikštelės pavyzdinėje programoje.
Velsas pasiūlė keletą geriausios praktikos pavyzdžių, kaip užtikrinti, kad jūsų naudotojai turėtų geriausią įmanomą patirtį:
  • Elegantiškai keičiasi rankenos režimas:
    • Išlaikykite vartotojo sąsajos nuoseklumą, nepaisant orientacijos. Negalima keisti elementų padėties, kad būtų galima sklandžiai pereiti.
    • Išplėsdami tai, kas išdėstyta aukščiau, neperjunkite labai skirtingų telefonų / planšetinių kompiuterių išdėstymų. Verčiau pritaikykite planšetinio kompiuterio išdėstymą mažesniems dydžiams, kad būtų nuoseklus.
  • Įsitikinkite, kad jūsų veikla prisitaiko prie mažų dydžių pateikė laikantis medžiagų dizaino modelių.
  • Naudokite FLAG_ACTIVITY_LAUNCH_ADJACENT kai prasminga padalyto ekrano režimu mėgautis malonesne patirtimi.
  • Dydžio keitimo nesuderinamumą paskelbkite tik tada, kai tai pagrįsta. Kaip aptarėme aukščiau, dėl to jūsų programa blogai išsiskiria.
Velas baigė sesiją pasiūlydamas keletą papildomų naudingų išteklių:
  • Kelių langų dokumentacija.
  • Medžiagos dizaino gairės, skirtos padalinto ekrano režimui.
  • Kelių langų programos pavyzdys.