Okenski način Freeform Android Nougat: kaj je in kako ga lahko razvijalci uporabijo

Večokenski način proste oblike je premalo izkoriščena in cenjena funkcija v sistemu Android Nougat. Pojasnjujemo, kaj je to in kako ga lahko razvijalci vključijo.

Okenski način proste oblike, kot je prvič pokazal Ars Technica

Ko je bil Android 7.0 Nougat prvič objavljen v začetku leta 2016, je s seboj prinesel zelo zahtevano funkcijo za platformo Android – podporo za več oken. Večina ljudi pozna podporo za več oken za razdeljen zaslon, ki je privzeto omogočena na vseh telefonih in tablicah Android Nougat. Naprave Android TV s sistemom Android Nougat imajo podporo za sliko v sliki in podporo za več oken.

Vendar pa je v sistemu Android Nougat prisoten še tretji način z več okni, ki se ga ne zaveda veliko ljudi: okenski način proste oblike. Ta način omogoča Androidu, da predstavi aplikacije kot lebdeča okna, ki jih lahko uporabnik poljubno premika in spreminja velikost. To je v bistvu Androidova izvedba a upravitelj oken za zlaganje.

V Dokumentacija SDK za Android, navaja, da:

Proizvajalci večjih naprav se lahko odločijo, da omogočijo način proste oblike, v katerem lahko uporabnik poljubno spreminja velikost posamezne dejavnosti. Če proizvajalec omogoči to funkcijo, naprava poleg načina razdeljenega zaslona ponuja tudi način proste oblike.

In tudi v Android 7.0 CDD:

Implementacije naprav z velikostjo zaslona xlarge MORAJO podpirati način proste oblike.

To pomeni, da bi vsaka nova naprava Android z velikim zaslonom, ki je dobavljena z Androidom 7.0, morda imela okenski način proste oblike, ki ga je omogočil proizvajalec.

Vendar to nikakor ni težka zahteva. Možno je prisiliti kaj Naprava Android Nougat (z omogočenimi možnostmi za razvijalce) podpira okenski način proste oblike z uporabo enega od dveh različnih načinov:


Omogočanje okenskega načina proste oblike v kateri koli napravi Android Nougat

Če vklopite možnost »Prisilno spreminjanje velikosti dejavnosti«, lahko aplikacije izvajajo v načinu proste oblike v kateri koli napravi

1. način (potreben je računalnik z adb)

Prepričajte se, da je odpravljanje napak USB omogočeno v možnostih za razvijalce. Nato svojo napravo povežite z računalnikom z nameščenim adb in izvedite naslednji ukaz:

adb shell settings put global enable_freeform_support 1

2. način (brez dodatnih zahtev)

Omogočite možnost »Prisilno spreminjanje velikosti dejavnosti« na dnu možnosti za razvijalce.

Oba načina zahtevata ponovni zagon sistemskega uporabniškega vmesnika, preden začneta veljati. Najlažji način za to je, da znova zaženete napravo (ali, če je vaša naprava rootana, lahko preprosto uničite com.android.systemui postopek)


OK, način proste oblike je torej omogočen... kaj zdaj?

Če ste omogočili način proste oblike s 1. metodo, bo na vnosih aplikacij v meniju Pregled nov gumb za zagon aplikacije v okenski način proste oblike.

Pri 2. metodi pa ni mogoče zagnati aplikacije v načinu proste oblike prek samega Androida. na srečo vsak zaganjalnik drugega proizvajalca lahko zažene aplikacijo v okenski način proste oblike z uporabo standardnih API-jev za Android, ki so bili dokončani kot del API ravni 24.

Ključ do zagona aplikacije v načinu proste oblike je, da pokličete ActivityOptions.setLaunchBounds() metoda. Ta metoda zahteva a Rect kot argument, ki vsebuje meje oken, s katerimi se bo aplikacija zagnala.

Nato lahko zaženete aplikacijo z startActivity(Intent, Bundle). Če še nimate ActivityOptions sveženj, ga lahko ustvarite z ActivityOptions.makeBasic() in potem kliče setLaunchBounds() na sveže ustvarjenem svežnju.

Upoštevajte, da je privzeto, če je na zaslonu Pregled že prisotno opravilo za aplikacijo Android vas bo preprosto preusmeril na obstoječo (celozaslonsko) nalogo, ki jo je predhodno zagnal uporabnik. Preden poskusite zagnati aplikacijo v oknu poljubne oblike, boste morali počistiti vse naloge za aplikacijo v pregledu. (Za aplikacije z dejavnostmi, ki se zaženejo v standard oz singleTop načinih, lahko prisilite, da se odpre novo okno, tako da dodate Intent.FLAG_ACTIVITY_MULTIPLE_TASK označite z namenom pred klicem startActivity().)


Kako način proste oblike deluje pod pokrovom?

Tukaj je odličen članek napisano, ki pojasnjuje, kako je način več oken, vključno z načinom proste oblike, implementiran v Android Nougat. (OPOMBA: članek je napisan v kitajščini, zato ga ne pozabite predvajati prek Google Prevajalnika)

Na kratko, aplikacije v načinu proste oblike se izvajajo ločeno od preostalega sistema (pomislite: navidezno namizje). Zato ni mogoče, da bi se aplikacije proste oblike izvajale na vrhu zaganjalnika ali na vrhu druge celozaslonske aplikacije.

Aplikacije, ki se izvajajo v načinu proste oblike (ki nimajo android: windowIsFloating nastavljen na true) imajo a DecorCaptionView dodan kot podrejeni element najvišje ravni DecorView. Ta pogled vsebuje a LinearLayout definiranje vrstice z napisi okna za premikanje, maksimiranje in zapiranje okna. Čeprav ga osebno ne priporočam, je možno dostopati do tega pogleda in ga prilagoditi tako, da dobite DecorView uporabo Window.getDecorView(), ki ga oddaja na a ViewGroup in nato dostop do njegovih podrejenih pogledov.

Vsaka aplikacija, ki je zasnovana tako, da se dobro obnaša v Androidovem standardnem načinu več oken z razdeljenim zaslonom, bo delovala v načinu proste oblike. isInMultiWindowMode() vrne true za aplikacije, ki se izvajajo v načinu proste oblike. Obstaja nekaj drugih javno dostopnih razredov in metod, ki jih lahko uporablja aplikacija in se nanašajo posebej na način proste oblike:

  • Window.setDecorCaptionShade(): to metodo lahko uporabite za preglasitev odtenka kontrolnikov za napise (gumb za povečanje in zapiranje) za aplikacije v načinu proste oblike.
  • Window.setRestrictedCaptionAreaListener(): to lahko uporabite za zaznavanje, ko se okno premika v načinu proste oblike. The Window.OnRectrictedCaptionAreaChangedListener se pokliče vsakič, ko se spremeni položaj kontrolnikov za napise (ko uporabnik premakne okno) in zagotovi a Rect z novimi mejami kontrolnikov za napise.
  • ActivityInfo.WindowLayout: ta razred vsebuje informacije, navedene v manifestu aplikacije glede začetnega položaja okna proste oblike, ki ga lahko aplikacija zahteva ob zagonu. Na primer, lahko navedete naslednje v oznaka vašega manifesta:
     android: defaultHeight="640dp"
    android: defaultWidth="360dp"
    android: gravity="center" />
    Potem, ko je naprava že v načinu proste oblike in se aplikacija zažene, se bo zagnala s temi določenimi mejami.

Primeri okenskega načina proste oblike v akciji

Opravilna vrstica doda začetni meni in pladenj z nedavnimi aplikacijami, ki dopolnjujeta okenski način proste oblike

Poleti 2016, ko je bil Android Nougat še predogled za razvijalce, sem izdal aplikacijo z imenom Opravilna vrstica ki ponuja Windows podoben začetni meni in seznam nedavnih aplikacij v sistemskem prekrivanju. Uporabnikom na Nougatu omogoča zagon aplikacij v okenskem načinu poljubne oblike — in ker opravilna vrstica uporablja prekrivanje, lahko ostane na zaslonu v okolju oken poljubne oblike. Kombinacija opravilne vrstice in načina proste oblike daje kateri koli napravi Android, zlasti tabličnim računalnikom, občutek, podoben računalniku.

Ti lahko prenesite opravilno vrstico na Google Play, oz ogled izvorne kode sebe na GitHubu. Poleg konceptov, omenjenih v tem članku, uporabljam tudi nekaj trikov za ohranjanje aktivnega okolja načina proste oblike, tudi če na zaslonu ni prikazanih oken proste oblike. Uporabniki lahko tudi po želji nastavijo opravilno vrstico kot privzeti zaganjalnik, da omogočijo, da se njihova naprava samodejno zažene v okolju načina proste oblike.

Ker ni naprav, ki bi bile uradno dobavljene s podporo za okna proste oblike, ki bi jo omogočil OEM (od tega pisanja), priporočam uporabo opravilne vrstice kot orodja za razvijalce za testiranje svojih aplikacij v okolju proste oblike oken na napravah, ki sicer ne podpirajo to.

Poleg opravilne vrstice sem spremenil tudi izvorno kodo Launcher3 iz AOSP, da omogočim zagon aplikacij v načinu proste oblike. To je čisti klon standardnega zaganjalnika Android 7.1.1 z minimalnimi spremembami, ki so potrebne za zagon aplikacij v prosti obliki. Ta spremenjeni zaganjalnik sem zagotovil v upanju, da bodo drugi razvijalci implementirali podporo za zagon oken poljubne oblike v svojih zaganjalnikih po meri. Ti lahko ogled izvorne kode na GitHubu, oz prenesite vzorčni APK.

Upam, da lahko razvijalci zaganjalnikov po meri uporabijo to kodo in omogočijo podporo za zagon proste oblike okenske aplikacije za tiste uporabnike, ki želijo večjo prilagodljivost pri upravljanju oken na svojih velikih zaslonih naprave.