Az Android Nougat szabad formájú ablakmódja: mi ez, és hogyan használhatják a fejlesztők

A szabad formájú többablakos mód egy kevéssé kihasznált és alulértékelt funkció az Android Nougatban. Elmagyarázzuk, mi ez, és hogyan építhetik be a fejlesztők.

Szabad formájú ablakmód, amint azt először bemutatta Ars Technica

Amikor 2016 elején először bejelentették az Android 7.0 Nougat-ot, egy nagyon kért funkciót hozott az Android platformra: a több ablakos támogatást. A legtöbb ember tisztában van az osztott képernyős, több ablakos támogatással, amely alapértelmezés szerint engedélyezve van minden Android Nougat telefonon és táblagépen. Az Android Nougat rendszerrel rendelkező Android TV-eszközök támogatják a kép a képben több ablakos támogatást.

Az Android Nougatban azonban van egy harmadik többablakos mód, amelyről nem sokan tudnak: szabad formájú ablakmód. Ez a mód lehetővé teszi az Android számára, hogy az alkalmazásokat lebegő ablakokként jelenítse meg, amelyeket a felhasználó tetszés szerint áthelyezhet és átméretezhet. Ez lényegében az Android implementációja a egymásra rakott ablakkezelő.

Ban,-ben Android SDK dokumentáció, azt írja ki, hogy:

A nagyobb készülékek gyártói választhatják a szabad formájú mód engedélyezését, amelyben a felhasználó szabadon átméretezheti az egyes tevékenységeket. Ha a gyártó engedélyezi ezt a funkciót, a készülék az osztott képernyős mód mellett szabad formájú módot is kínál.

És azt is, a Android 7.0 CDD:

Az xlarge képernyőmérettel rendelkező eszközmegvalósításoknak támogatniuk KELL a szabad formájú módot.

Ez azt jelzi, hogy az Android 7.0-val szállított új, nagy képernyős Android-eszközökön előfordulhat, hogy a gyártó engedélyezte a szabad formájú ablakmódot.

Ez azonban egyáltalán nem szigorú követelmény. Lehet kényszeríteni Bármi Android Nougat eszköz (engedélyezett fejlesztői beállításokkal), amely támogatja a szabad formájú ablakmódot két különböző módszer egyikével:


A szabad formájú ablak mód engedélyezése bármely Android Nougat eszközön

A „Tevékenységek átméretezhetőségének kényszerítése” opció bekapcsolásával az alkalmazások szabad formájú módban futhatnak bármely eszközön

1. módszer (adb-vel rendelkező számítógép szükséges)

Győződjön meg arról, hogy az USB hibakeresés engedélyezve van a Fejlesztői beállításokban. Ezután csatlakoztassa eszközét egy olyan számítógéphez, amelyre telepítve van az adb, és hajtsa végre a következő parancsot:

adb shell settings put global enable_freeform_support 1

2. módszer (nincs további követelmény)

Engedélyezze a „Tevékenységek átméretezhetőségének kényszerítése” lehetőséget a Fejlesztői beállítások alján.

Mindkét módszer érvénybe lépése előtt újra kell indítani a rendszer felhasználói felületet. Ennek legegyszerűbb módja az eszköz újraindítása (vagy ha az eszköz rootolt, egyszerűen leállíthatja a com.android.systemui folyamat)


OK, tehát a szabad formájú mód engedélyezve van… most mi van?

Ha az 1. módszerrel engedélyezte a szabad formájú módot, akkor az Áttekintés menü alkalmazásbejegyzéseinél egy új gomb jelenik meg az alkalmazás szabad formájú ablak módba történő elindításához.

A 2. módszerrel azonban nem lehet egy alkalmazást szabad formájú módba indítani magán az Androidon keresztül. Szerencsére, bármely harmadik féltől származó indító elindíthatja az alkalmazást szabad formájú ablak módba szabványos Android API-k használatával, amelyeket a 24. API-szint részeként véglegesítettek.

Az alkalmazás szabad formájú módban történő indításának kulcsa a ActivityOptions.setLaunchBounds() módszer. Ez a módszer a Rect argumentumként, amely tartalmazza azokat az ablakhatárokat, amelyekkel az alkalmazás elindul.

Ezután elindíthatja az alkalmazást a következővel startActivity(Intent, Bundle). Ha még nincs ActivityOptions köteggel létrehozhat egyet ActivityOptions.makeBasic() majd felhív setLaunchBounds() a frissen létrehozott kötegen.

Vegye figyelembe, hogy alapértelmezés szerint, ha már van egy feladat az alkalmazáshoz az Áttekintés képernyőn, akkor Az Android egyszerűen átirányítja a meglévő (teljes képernyős) feladatra, amelyet korábban elindított a felhasználó. Mielőtt megpróbálná elindítani az alkalmazást egy szabad formájú ablakban, törölnie kell az alkalmazás összes feladatát az Áttekintés részben. (Azoknál az alkalmazásoknál, amelyeken belül elindulnak a tevékenységek standard vagy singleTop módban kényszeríthet egy új ablak megnyitását a Intent.FLAG_ACTIVITY_MULTIPLE_TASK hívás előtt jelezze a szándéknak startActivity().)


Hogyan működik a szabad formájú mód a motorháztető alatt?

Van kiváló cikk írt, amely elmagyarázza, hogyan valósítható meg a több ablakos mód, beleértve a szabad formájú módot is az Android Nougatban. (MEGJEGYZÉS: a cikk kínai nyelven íródott, ezért feltétlenül futtassa a Google Fordítón keresztül)

Dióhéjban, a szabad formátumú alkalmazások a rendszer többi részétől külön veremben futnak (gondoljunk csak úgy: virtuális asztalra). Ezért nem futhatnak szabad formájú alkalmazások az indító vagy egy másik teljes képernyős alkalmazás tetején.

Szabad formájú módban futó alkalmazások (amelyeknek nincs android: windowIsFloating igazra állítva) van a DecorCaptionView a legfelső szint gyermekeként hozzáadva DecorView. Ez a nézet tartalmazza a LinearLayout az ablak feliratsávjának meghatározása az ablak mozgatásához, maximalizálásához és bezárásához. Bár személyesen nem ajánlom, a nézet elérése és testreszabása lehetséges a DecorView segítségével Window.getDecorView(), öntve a ViewGroup majd hozzáfér a gyermeknézetekhez.

Minden olyan alkalmazás, amelyet úgy terveztek, hogy jól működjön az Android szabványos osztott képernyős többablakos módjában, szabad formájú módban is működik. isInMultiWindowMode() igazat ad vissza a szabad formájú módban futó alkalmazásokhoz. Van néhány más nyilvánosan elérhető osztály és metódus, amelyet egy alkalmazás használhat, és amelyek kifejezetten a szabad formájú módhoz kapcsolódnak:

  • Window.setDecorCaptionShade(): ezzel a módszerrel felülírható a feliratvezérlők (a maximalizálás és a bezárás gomb) árnyalata szabad formátumú alkalmazások esetén.
  • Window.setRestrictedCaptionAreaListener(): ezzel érzékelhető, ha egy ablak szabad formájú módban mozog. A Window.OnRectrictedCaptionAreaChangedListener minden alkalommal meghívódik, amikor a feliratvezérlők pozíciója megváltozik (amikor a felhasználó megmozgatja az ablakot), és megadja a Rect a feliratvezérlők új határaival.
  • ActivityInfo.WindowLayout: ez az osztály az alkalmazás jegyzékében deklarált információkat tartalmaz egy szabad formájú ablak kezdeti helyzetére vonatkozóan, amelyet az alkalmazás elindításakor kérhet. Például a következőket sorolhatja fel a jegyzékének címkéje:
     android: defaultHeight="640dp"
    android: defaultWidth="360dp"
    android: gravity="center" />
    Ezután, amikor az eszköz már szabad formájú módban van, és az alkalmazás elindul, ezekkel a megadott határokkal fog elindulni.

Példák a szabad formájú ablakmódra működés közben

A Tálca egy start menüt és a legutóbbi alkalmazások tálcáját ad hozzá a szabad formájú ablakmód kiegészítéséhez

2016 nyarán, amikor még fejlesztői előzetes volt az Android Nougat, kiadtam egy alkalmazást Tálca amely egy Windows-szerű startmenüt és a legutóbbi alkalmazások listáját kínálja egy rendszerfedvényben. Lehetővé teszi a Nougat felhasználóinak, hogy szabad formájú ablak módban indítsanak alkalmazásokat – és mivel a Tálca fedvényt használ, a képernyőn maradhat a szabad formájú ablakos környezetben. A Tálca és a szabad formájú mód kombinációja bármely Android-eszköznek, különösen a táblagépeknek PC-szerű érzést kölcsönöz.

tudsz letöltés Tálca a Google Playen, vagy nézze meg a forráskódot magad a GitHubon. A cikkben említett fogalmakon túlmenően bevetek néhány trükköt is, hogy a szabad formájú környezetet akkor is aktívan tartsam, amikor nem jelennek meg szabad formájú ablakok a képernyőn. A felhasználók opcionálisan beállíthatják a Tálcát alapértelmezett indítóként is, hogy eszközük automatikusan elindulhasson a szabad formájú környezetbe.

Mivel nincsenek olyan eszközök, amelyek hivatalosan az OEM által engedélyezett szabad formájú ablaktámogatással rendelkeznek (a jelen pillanatban), azt javaslom a Tálca használata eszközként a fejlesztők számára, hogy teszteljék alkalmazásaikat szabad formájú ablakos környezetben olyan eszközökön, amelyek egyébként nem támogatják azt.

A Tálca mellett az AOSP Launcher3 forráskódját is módosítottam, hogy lehetővé tegye az alkalmazások szabad formájú módba történő indítását. Ez az Android 7.1.1 készletindító egyszerű klónja, a minimális módosításokkal, amelyek lehetővé teszik a szabad formájú alkalmazások elindítását. Abban a reményben bocsátottam rendelkezésre ezt a módosított indítót, hogy más fejlesztők is támogatni fogják a szabad formájú ablakok elindítását egyéni indítóprogramjaikban. tudsz nézze meg a forráskódot a GitHubon, vagy tölts le egy minta APK-t.

Remélem, hogy az egyéni indítók fejlesztői használhatják ezt a kódot, és lehetővé teszik a szabad formátumú indítás támogatását ablakalkalmazások azoknak a felhasználóknak, akik nagyobb rugalmasságot szeretnének az ablakkezeléshez a nagy képernyőn eszközöket.