Način rada s više prozora slobodnog oblika nedovoljno je iskorištena i nedovoljno cijenjena značajka u Androidu Nougat. Objašnjavamo što je to i kako ga programeri mogu uključiti.
Kada je Android 7.0 Nougat prvi put najavljen početkom 2016., sa sobom je donio vrlo traženu značajku na platformi Android — podršku za više prozora. Većina ljudi zna da je podrška za više prozora podijeljenog zaslona omogućena prema zadanim postavkama na svim Android Nougat telefonima i tabletima. Android TV uređaji s Android Nougatom dolaze s podrškom za sliku u slici s više prozora.
Međutim, postoji treći način rada s više prozora koji je prisutan u Android Nougatu za koji je malo ljudi svjesno: režim slobodnog oblika prozora. Ovaj način rada omogućuje Androidu da predstavi aplikacije kao plutajuće prozore koje korisnik može pomicati i mijenjati im veličinu. To je u biti Androidova implementacija a upravitelj prozora slaganja.
u Android SDK dokumentacija, stoji da:
Proizvođači većih uređaja mogu odlučiti omogućiti način slobodnog oblika, u kojem korisnik može slobodno mijenjati veličinu svake aktivnosti. Ako proizvođač omogući ovu značajku, uređaj nudi način slobodnog oblika uz način podijeljenog zaslona.
I također, u Android 7.0 CDD:
Implementacije uređaja s veličinom zaslona xlarge TREBALE bi podržavati način slobodnog oblika.
To znači da bi bilo koji novi Android uređaj s velikim zaslonom koji se isporučuje s Androidom 7.0 potencijalno mogao imati način slobodnog oblika prozora koji je omogućio proizvođač.
Međutim, to apsolutno nije težak zahtjev. Moguće je prisiliti bilo koji Android Nougat uređaj (s omogućenim opcijama za razvojne programere) za podršku slobodnog oblika prozora pomoću jedne od dvije različite metode:
Omogućivanje slobodnog načina rada prozora na bilo kojem Android Nougat uređaju
Metoda 1 (potrebno je računalo s adb)
Provjerite je li USB debugging omogućen u opcijama za razvojne programere. Zatim spojite svoj uređaj na računalo s instaliranim adb-om i izvršite sljedeću naredbu:
adb shell settings put global enable_freeform_support 1
Metoda 2 (bez dodatnih zahtjeva)
Omogućite opciju "Prisilno mijenjanje veličine aktivnosti" na dnu opcija za razvojne programere.
Obje ove metode zahtijevaju ponovno pokretanje korisničkog sučelja sustava prije nego što stupe na snagu. Najlakši način da to učinite je da ponovno pokrenete svoj uređaj (ili, ako je vaš uređaj rootan, možete jednostavno uništiti com.android.systemui
postupak)
U redu, dakle omogućen je način slobodnog oblika... što sad?
Ako ste omogućili način slobodnog oblika korištenjem Metode 1, postojat će novi gumb na unosima aplikacije u izborniku Pregled za pokretanje aplikacije u načinu rada prozora slobodnog oblika.
S metodom 2, međutim, nije moguće pokrenuti aplikaciju u slobodnom načinu rada putem samog Androida. srećom, bilo koji pokretač treće strane može pokrenuti aplikaciju u slobodnom obliku prozora koristeći standardne Android API-je koji su finalizirani kao dio API razine 24.
Ključ za pokretanje aplikacije u slobodnom obliku je pozivanje ActivityOptions.setLaunchBounds()
metoda. Ova metoda zahtijeva a Rect
kao argument, koji sadrži granice prozora s kojima će se aplikacija pokrenuti.
Zatim možete pokrenuti aplikaciju s startActivity(Intent, Bundle)
. Ako već nemate ActivityOptions
paket, možete ga izraditi s ActivityOptions.makeBasic()
a zatim zove setLaunchBounds()
na svježe stvorenom svežnju.
Imajte na umu da prema zadanim postavkama, ako već postoji zadatak za aplikaciju na zaslonu Pregled, tada Android će vas jednostavno preusmjeriti na postojeći zadatak (na cijelom zaslonu) koji je prethodno pokrenuo korisnik. Morat ćete poništiti sve zadatke za aplikaciju u Pregledu prije pokušaja pokretanja aplikacije u prozoru slobodnog oblika. (Za aplikacije s aktivnostima koje se pokreću u standard
ili singleTop
načina rada, možete prisilno otvoriti novi prozor dodavanjem Intent.FLAG_ACTIVITY_MULTIPLE_TASK
označite namjeru prije poziva startActivity()
.)
Kako način rada slobodnog oblika funkcionira ispod haube?
Tamo je odličan članak napisan koji objašnjava kako se način s više prozora, uključujući način slobodnog oblika, implementira u Android Nougat. (NAPOMENA: članak je napisan na kineskom, stoga ga svakako pustite putem Google Translate-a)
Ukratko, aplikacije u slobodnom načinu rada rade odvojeno od ostatka sustava (mislite: virtualna radna površina). Stoga nije moguće da se aplikacije slobodnog oblika izvode na vrhu pokretača ili na vrhu druge aplikacije na cijelom zaslonu.
Aplikacije koje rade u slobodnom načinu rada (koje nemaju android: windowIsFloating
postaviti na istinito) imati a DecorCaptionView
dodan kao dijete najviše razine DecorView
. Ovaj pogled sadrži a LinearLayout
definiranje trake naslova prozora za pomicanje, maksimiziranje i zatvaranje prozora. Iako ga osobno ne preporučujem, moguće je pristupiti ovom prikazu i prilagoditi ga preuzimanjem DecorView
korištenjem Window.getDecorView()
, bacajući ga na a ViewGroup
a zatim pristupiti njegovim podređenim pogledima.
Svaka aplikacija koja je dizajnirana da se dobro ponaša u Androidovom standardnom načinu rada s više prozora podijeljenog zaslona radit će u načinu slobodnog oblika. isInMultiWindowMode()
vratit će true za aplikacije koje rade u slobodnom načinu rada. Postoji nekoliko drugih javno dostupnih klasa i metoda koje aplikacija može koristiti, a koje se odnose posebno na slobodni oblik:
-
Window.setDecorCaptionShade()
: ova se metoda može koristiti za nadjačavanje nijanse kontrola naslova (gumb za povećanje i zatvaranje) za aplikacije u slobodnom načinu rada. -
Window.setRestrictedCaptionAreaListener()
: ovo se može koristiti za otkrivanje kada se prozor pomiče u slobodnom načinu rada. TheWindow.OnRectrictedCaptionAreaChangedListener
poziva se svaki put kad se položaj kontrola naslova promijeni (kada korisnik pomiče prozor okolo) i pruža aRect
s novim granicama kontrola opisa. -
ActivityInfo.WindowLayout
: ova klasa sadrži informacije navedene u manifestu aplikacije o početnom pozicioniranju prozora slobodnog oblika koji aplikacija može zahtijevati pri pokretanju. Na primjer, možete navesti sljedeće u oznaka vašeg manifesta:
Zatim, kada je uređaj već u slobodnom načinu rada i kada se aplikacija pokrene, pokrenut će se s ovim navedenim granicama.android: defaultHeight="640dp"
android: defaultWidth="360dp"
android: gravity="center" />
Primjeri načina slobodnog oblika prozora na djelu
U ljeto 2016., dok je Android Nougat još bio programerski pregled, objavio sam aplikaciju pod nazivom Taskbar koji pruža početni izbornik nalik Windowsu i popis nedavnih aplikacija u sloju sustava. Omogućuje korisnicima na Nougatu da pokreću aplikacije u slobodnom obliku prozora — i, budući da programska traka koristi preklapanje, može ostati na zaslonu u slobodnom prozoru. Kombinacija programske trake i slobodnog načina rada svakom Android uređaju, posebno tabletima, daje dojam kao na osobnom računalu.
Možeš preuzimanje programske trake na Google Playu ili pogledajte izvorni kod sebe na GitHubu. Uz koncepte spomenute u ovom članku, koristim i nekoliko trikova kako bih održao okruženje slobodnog oblika aktivnim čak i kada se na zaslonu ne prikazuju prozori slobodnog oblika. Korisnici također mogu opcionalno postaviti programsku traku kao zadani pokretač kako bi omogućili svom uređaju da se automatski pokrene u okruženju slobodnog oblika.
Budući da ne postoje uređaji koji se službeno isporučuju s podrškom za prozore slobodnog oblika koju je omogućio OEM (u trenutku pisanja ovog teksta), preporučujem korištenje programske trake kao alata za programere da testiraju svoje aplikacije u slobodnom okruženju prozora na uređajima koji inače ne podržavaju to.
Osim programske trake, također sam modificirao izvorni kod Launcher3 iz AOSP-a kako bih mu omogućio pokretanje aplikacija u slobodnom načinu rada. Ovo je izravni klon standardnog Android 7.1.1 pokretača, s minimalnim izmjenama potrebnim za pokretanje slobodnih aplikacija. Omogućio sam ovaj modificirani pokretač u nadi da će drugi programeri implementirati podršku za pokretanje slobodnih prozora u svojim prilagođenim pokretačima. Možeš pogledajte izvorni kod na GitHubu ili preuzmite ogledni APK.
Nadam se da programeri prilagođenih pokretača mogu upotrijebiti ovaj kod i omogućiti podršku za pokretanje slobodnog oblika prozorske aplikacije za one korisnike koji žele veću fleksibilnost upravljanja prozorima na svojim velikim zaslonima uređaja.