Vabakujuline mitme akna režiim on Android Nougati alakasutatud ja alahinnatud funktsioon. Selgitame, mis see on ja kuidas arendajad saavad seda lisada.
Kui Android 7.0 Nougat esmakordselt 2016. aasta alguses välja kuulutati, tõi see Androidi platvormile kaasa palju nõutud funktsiooni – mitme akna toe. Enamik inimesi on teadlikud jagatud ekraani mitme akna toest, mis on vaikimisi lubatud kõigis Android Nougati telefonides ja tahvelarvutites. Android Nougatiga Android TV seadmetes on pilt-pildis mitme akna tugi.
Android Nougatis on aga kolmas mitme akna režiim, millest paljud ei tea: vabakujuline aknarežiim. See režiim võimaldab Androidil esitada rakendusi hõljuvate akendena, mille suurust saab kasutaja soovi korral liigutada ja muuta. See on sisuliselt Androidi rakendus a virnastamise aknahaldur.
Aastal Android SDK dokumentatsioon, on kirjas, et:
Suuremate seadmete tootjad saavad lubada vabakujulise režiimi, kus kasutaja saab iga tegevuse suurust vabalt muuta. Kui tootja lubab selle funktsiooni, pakub seade lisaks jagatud ekraani režiimile vabakujulist režiimi.
Ja ka, Android 7.0 CDD:
Seadmete rakendused ekraani suurusega xlarge PEAKSID toetama vabakujulist režiimi.
See näitab, et igal uuel suure ekraaniga Android-seadmel, mis tarnitakse operatsioonisüsteemiga Android 7.0, võib tootja lubada vabakujulist aknarežiimi.
See pole aga absoluutselt raske nõue. On võimalik sundida ükskõik milline Android Nougat seade (millega arendaja valikud on lubatud), et toetada vabakujulist aknarežiimi, kasutades ühte kahest erinevast meetodist.
Vabakujulise aknarežiimi lubamine mis tahes Android Nougati seadmes
1. meetod (vajalik on adb-ga arvuti)
Veenduge, et arendaja valikutes oleks USB-silumine lubatud. Seejärel ühendage oma seade arvutiga, kuhu on installitud adb, ja käivitage järgmine käsk:
adb shell settings put global enable_freeform_support 1
2. meetod (lisanõuded puuduvad)
Lubage arendaja valikute allosas valik „Sundida tegevusi suurust muutma”.
Mõlemad meetodid nõuavad süsteemi kasutajaliidese taaskäivitamist, enne kui need jõustuvad. Lihtsaim viis seda teha on seadme taaskäivitamine (või kui teie seade on juurdunud, võite com.android.systemui
protsess)
OK, nii et vabakujuline režiim on lubatud… mis nüüd?
Kui lubasite 1. meetodi abil vabakujulise režiimi, kuvatakse menüü Ülevaade rakenduste kirjete juures uus nupp, mis käivitab rakenduse vabas vormis aknarežiimi.
2. meetodi puhul ei ole aga võimalik rakendust Androidi enda kaudu vabavormingusse režiimi käivitada. Õnneks mis tahes kolmanda osapoole käivitusprogramm võib käivitada rakenduse vabas vormis aknarežiimis kasutades standardseid Android API-sid, mis viidi lõpule API taseme 24 osana.
Rakenduse vabakujulises režiimis käivitamise võti on helistada numbrile ActivityOptions.setLaunchBounds()
meetod. See meetod võtab a Rect
argumendina, mis sisaldab aknapiire, millega rakendus käivitub.
Seejärel saate rakenduse käivitada startActivity(Intent, Bundle)
. Kui teil veel ei ole ActivityOptions
komplekti, saate selle luua ActivityOptions.makeBasic()
ja siis helistab setLaunchBounds()
äsja loodud kimbu kohta.
Pange tähele, et vaikimisi, kui ülevaatekuval on rakenduse jaoks juba ülesanne, siis Android suunab teid lihtsalt olemasolevale (täisekraanil) ülesandele, mille käivitas varem kasutaja. Enne rakenduse vabakujulises aknas käivitamist peate jaotises Ülevaade kustutama kõik rakenduse ülesanded. (Rakenduste jaoks, mille tegevused käivituvad standard
või singleTop
režiimides saate sundida uue akna avama, lisades Intent.FLAG_ACTIVITY_MULTIPLE_TASK
märgistage enne helistamist startActivity()
.)
Kuidas vabakujuline režiim kapoti all töötab?
Seal on suurepärane artikkel kirjutatud, mis selgitab, kuidas mitme akna režiimi, sealhulgas vabakujulist režiimi, rakendatakse Android Nougatis. (MÄRKUS: artikkel on kirjutatud hiina keeles, seega käivitage see kindlasti Google'i tõlke kaudu)
Lühidalt öeldes töötavad vabavormingus rakendused ülejäänud süsteemist eraldi virnas (mõelge: virtuaalne töölaud). Seetõttu ei ole vabavormilistel rakendustel võimalik käivitusprogrammi peal või mõne muu täisekraanirakenduse peal töötada.
Vabakujulises režiimis töötavad rakendused (millel pole android: windowIsFloating
seatud tõeseks) on a DecorCaptionView
lisatud tipptaseme lapsena DecorView
. See vaade sisaldab a LinearLayout
akna pealkirjariba määratlemine akna liigutamiseks, maksimeerimiseks ja sulgemiseks. Kuigi ma ei soovita seda isiklikult, on võimalik sellele vaatele juurde pääseda ja seda kohandada, hankides DecorView
kasutades Window.getDecorView()
, kandes selle a ViewGroup
ja seejärel pääseda juurde selle alamvaadetele.
Kõik rakendused, mis on loodud hästi toimima Androidi tavalises jagatud ekraaniga mitme akna režiimis, töötavad vabakujulises režiimis. isInMultiWindowMode()
naaseb tõene vabakujulises režiimis töötavate rakenduste puhul. Rakendus saab kasutada mõnda muud avalikult kättesaadavat klassi ja meetodit, mis on konkreetselt seotud vabavorminguga.
-
Window.setDecorCaptionShade()
: seda meetodit saab kasutada vabavormingus režiimis olevate rakenduste subtiitrite juhtnuppude varju (maksimeerimis- ja sulgemisnupp) alistamiseks. -
Window.setRestrictedCaptionAreaListener()
: seda saab kasutada akent vabakujulises režiimis liigutamise tuvastamiseks. TheWindow.OnRectrictedCaptionAreaChangedListener
kutsutakse välja iga kord, kui subtiitrite juhtelementide asukoht muutub (kui kasutaja liigutab akent ümber), ja pakub aRect
koos subtiitrite juhtelementide uute piiridega. -
ActivityInfo.WindowLayout
: see klass sisaldab rakenduse manifestis deklareeritud teavet vabakujulise akna algse asukoha kohta, mida rakendus saab käivitamisel taotleda. Näiteks saate loendis loetleda järgmise teie manifesti silt:
Seejärel, kui seade on juba vabakujulises režiimis ja rakendus käivitatakse, käivitub see nende määratud piiridega.android: defaultHeight="640dp"
android: defaultWidth="360dp"
android: gravity="center" />
Näited vabakujulisest aknarežiimist tegevuses
2016. aasta suvel, kui Android Nougat oli veel arendaja eelvaade, andsin välja rakenduse nimega Tegumiriba mis pakub süsteemi ülekattes Windowsi-laadset käivitusmenüüd ja viimaste rakenduste loendit. See võimaldab Nougati kasutajatel käivitada rakendusi vabas vormis aknarežiimis – ja kuna tegumiriba kasutab ülekatet, võib see jääda ekraanile vabakujulise akna keskkonnas. Tegumiriba ja vabavormingus režiimi kombinatsioon annab igale Android-seadmele, eriti tahvelarvutile, arvutilaadse tunde.
Sa saad laadige alla tegumiriba Google Plays või vaadake lähtekoodi ennast GitHubis. Lisaks selles artiklis mainitud kontseptsioonidele kasutan ka mõningaid nippe, et hoida vabavormingu keskkonda aktiivsena ka siis, kui ekraanil ei kuvata vabakujulisi akent. Kasutajad saavad valikuliselt seada tegumiriba oma vaikekäivitajaks, et võimaldada nende seadmel automaatselt vabakujulise režiimi keskkonda käivitada.
Kuna pole ühtegi seadet, mis ametlikult tarnitakse OEM-i lubatud vabakujulise akna toega (selle kirjutamise seisuga), soovitan tegumiriba kasutamine tööriistana, mille abil arendajad saavad testida oma rakendusi vabas vormis aknakeskkonnas seadmetes, mis muidu ei toeta seda.
Lisaks tegumiribale olen muutnud ka AOSP Launcher3 lähtekoodi, et see saaks käivitada rakendusi vabas vormis režiimis. See on Android 7.1.1 käivitusprogrammi otsene kloon koos minimaalsete muudatustega, mis on vajalikud vabakujuliste rakenduste käivitamiseks. Pakkusin selle muudetud käivitusprogrammi lootuses, et teised arendajad rakendavad oma kohandatud käivitusprogrammides vabakujuliste akende käivitamise tuge. Sa saad vaadake lähtekoodi GitHubis või laadige alla APK näidis.
Loodan, et kohandatud käivitusprogrammide arendajad saavad seda koodi kasutada ja võimaldada vabas vormis käivitamise tuge aknarakendused neile kasutajatele, kes soovivad oma suure ekraaniga aknahalduseks suuremat paindlikkust seadmeid.