Režim Android Nougat Freeform Window: Co to je a jak jej mohou vývojáři využít

click fraud protection

Volný režim více oken je v Androidu Nougat málo využívaná a nedoceněná funkce. Vysvětlíme, co to je a jak to mohou vývojáři začlenit.

Režim volného okna, jak bylo poprvé ukázáno Ars Technica

Když byl Android 7.0 Nougat poprvé oznámen na začátku roku 2016, přinesl s sebou na platformu Android velmi žádanou funkci – podporu více oken. Většina lidí si je vědoma podpory více oken s rozdělenou obrazovkou, která je ve výchozím nastavení povolena na všech telefonech a tabletech Android Nougat. Zařízení Android TV se systémem Android Nougat jsou dodávána s podporou pro více oken obrazu v obraze.

V Androidu Nougat je však přítomen třetí režim více oken, o kterém si mnoho lidí neuvědomuje: režim volného okna. Tento režim umožňuje systému Android prezentovat aplikace jako plovoucí okna, která může uživatel libovolně přesouvat a měnit jejich velikost. Je to v podstatě implementace systému Android a stohovací správce oken.

V Dokumentace k Android SDK, uvádí, že:

Výrobci větších zařízení se mohou rozhodnout povolit režim volného tvaru, ve kterém může uživatel libovolně měnit velikost každé aktivity. Pokud výrobce tuto funkci povolí, zařízení nabízí kromě režimu rozdělené obrazovky také režim volného tvaru.

A také v Android 7.0 CDD:

Implementace zařízení s velikostí obrazovky xlarge BY MĚLY podporovat režim volného tvaru.

To znamená, že jakékoli nové zařízení Android s velkou obrazovkou, které je dodáváno se systémem Android 7.0, by mohlo mít od výrobce povolený režim volného okna.

To však rozhodně není náročný požadavek. Je možné přinutit žádný Zařízení Android Nougat (s povolenými možnostmi pro vývojáře) pro podporu režimu volného okna pomocí jedné ze dvou různých metod:


Povolení režimu volného okna na jakémkoli zařízení Android Nougat

Zapnutím možnosti „Vynutit změnu velikosti aktivit“ umožňuje aplikacím běžet v režimu volného tvaru na jakémkoli zařízení

Metoda 1 (je vyžadován počítač s adb)

Ujistěte se, že je povoleno ladění USB v možnostech vývojáře. Poté připojte zařízení k počítači s nainstalovaným adb a spusťte následující příkaz:

adb shell settings put global enable_freeform_support 1

Metoda 2 (žádné další požadavky)

Povolte možnost „Vynutit změnu velikosti aktivit“ v dolní části Možnosti vývojáře.

Obě tyto metody vyžadují restartování uživatelského rozhraní systému, než se projeví. Nejjednodušší způsob, jak toho dosáhnout, je restartovat zařízení (nebo, pokud je vaše zařízení rootované, můžete jednoduše zabít com.android.systemui proces)


OK, takže režim volného tvaru je povolen… co teď?

Pokud jste povolili režim volného tvaru pomocí metody 1, bude u položek aplikace v nabídce Přehled nové tlačítko pro spuštění aplikace do režimu okna volného tvaru.

S metodou 2 však není možné spustit aplikaci do volného režimu prostřednictvím samotného Androidu. Naštěstí, je možné, aby jakýkoli spouštěč třetí strany spustil aplikaci do režimu volného okna pomocí standardních rozhraní Android API, která byla dokončena v rámci úrovně API 24.

Klíčem ke spuštění aplikace ve volném režimu je zavolat na ActivityOptions.setLaunchBounds() metoda. Tato metoda trvá a Rect jako argument obsahující hranice okna, se kterými se aplikace spustí.

Poté můžete aplikaci spustit pomocí startActivity(Intent, Bundle). Pokud ještě nemáte ActivityOptions svazek, můžete jej vytvořit pomocí ActivityOptions.makeBasic() a pak zavolat setLaunchBounds() na čerstvě vytvořeném svazku.

Všimněte si, že ve výchozím nastavení, pokud již na obrazovce Přehled existuje úkol pro aplikaci, pak Android vás jednoduše přesměruje na existující úlohu (celá obrazovka), kterou dříve spustil uživatel. Než se pokusíte spustit aplikaci do volného okna, budete muset vymazat všechny úkoly pro aplikaci v Přehledu. (Pro aplikace s aktivitami, které se spouštějí v standard nebo singleTop režimů, můžete vynutit otevření nového okna přidáním Intent.FLAG_ACTIVITY_MULTIPLE_TASK před voláním příznak k záměru startActivity().)


Jak funguje režim volného tvaru pod kapotou?

Tady je výborný článek napsaný, který vysvětluje, jak je v Android Nougat implementován režim více oken, včetně režimu volného tvaru. (POZNÁMKA: článek je napsán v čínštině, takže si ho nezapomeňte spustit přes Google Translate)

Stručně řečeno, aplikace ve volném režimu běží v samostatném zásobníku od zbytku systému (myslím: virtuální plocha). Proto není možné, aby aplikace volného formátu běžely nad spouštěčem nebo nad jinou aplikací na celou obrazovku.

Aplikace běžící ve volném režimu (které nemají android: windowIsFloating nastavit na true) mít a DecorCaptionView přidáno jako dítě nejvyšší úrovně DecorView. Tento pohled obsahuje a LinearLayout definování lišty titulků okna pro přesun, maximalizaci a zavření okna. I když to osobně nedoporučuji, je možné získat přístup a přizpůsobit toto zobrazení získáním DecorView použitím Window.getDecorView(), odlévání do a ViewGroup a poté přístup k jeho podřízeným pohledům.

Jakákoli aplikace, která je navržena tak, aby se dobře chovala ve standardním režimu více oken s rozdělenou obrazovkou systému Android, bude fungovat v režimu volného tvaru. isInMultiWindowMode() vrátí hodnotu true pro aplikace běžící v režimu volného tvaru. Existuje několik dalších veřejně dostupných tříd a metod, které může aplikace použít a které se týkají konkrétně režimu volného tvaru:

  • Window.setDecorCaptionShade(): tuto metodu lze použít k přepsání odstínu ovládacích prvků titulků (tlačítko maximalizace a zavření) pro aplikace v režimu volného tvaru.
  • Window.setRestrictedCaptionAreaListener(): toto lze použít k detekci pohybu okna v režimu volného tvaru. The Window.OnRectrictedCaptionAreaChangedListener se volá pokaždé, když se změní pozice ovládacích prvků titulků (když uživatel pohybuje oknem) a poskytuje a Rect s novými hranicemi ovládacích prvků titulků.
  • ActivityInfo.WindowLayout: tato třída obsahuje informace deklarované v manifestu aplikace, pokud jde o počáteční umístění volného okna, které si aplikace může vyžádat při spuštění. Můžete například uvést následující v značka vašeho manifestu:
     android: defaultHeight="640dp"
    android: defaultWidth="360dp"
    android: gravity="center" />
    Poté, když je zařízení již v režimu volného tvaru a aplikace je spuštěna, spustí se s těmito určenými hranicemi.

Příklady režimu volného okna v akci

Hlavní panel přidává nabídku Start a panel s nejnovějšími aplikacemi jako doplněk režimu volného okna

V létě roku 2016, kdy byl Android Nougat stále ve verzi pro vývojáře, jsem vydal aplikaci s názvem Hlavní panel který poskytuje nabídku Start jako ve Windows a seznam posledních aplikací v překryvném systému. Umožňuje uživatelům na Nougat spouštět aplikace v režimu okna volného tvaru – a protože hlavní panel používá překrytí, může zůstat na obrazovce v prostředí okna volného tvaru. Kombinace hlavního panelu a režimu volného tvaru dává každému zařízení Android, zejména tabletům, pocit jako na počítači.

Můžeš stáhnout hlavní panel na Google Play, popř zobrazit zdrojový kód sami na GitHubu. Kromě konceptů zmíněných v tomto článku používám také několik triků, jak udržet prostředí režimu volného tvaru aktivní, i když se na obrazovce nezobrazují žádná okna volného tvaru. Uživatelé si také mohou volitelně nastavit hlavní panel jako svůj výchozí spouštěč, aby se jejich zařízení automaticky spouštělo do prostředí volného tvaru.

Vzhledem k tomu, že neexistují žádná zařízení, která se oficiálně dodávají s podporou oken volného tvaru povolenou výrobcem OEM (v době psaní tohoto článku), doporučuji používání hlavního panelu jako nástroje pro vývojáře k testování jejich aplikací v prostředí volného okna na zařízeních, která jinak nepodporují to.

Kromě hlavního panelu jsem také upravil zdrojový kód Launcher3 z AOSP, aby mohl spouštět aplikace do režimu volného tvaru. Toto je přímý klon standardního spouštěče Android 7.1.1 s minimálními úpravami nezbytnými k tomu, aby mohl spouštět aplikace volného tvaru. Poskytl jsem tento upravený spouštěč v naději, že další vývojáři zavedou podporu pro spouštění oken s volným tvarem ve svých vlastních spouštěcích nástrojích. Můžeš zobrazit zdrojový kód na GitHubu, popř stáhněte si ukázkový soubor APK.

Doufám, že vývojáři vlastních launcherů mohou využít tento kód a povolit podporu pro spouštění freeformu okenní aplikace pro uživatele, kteří chtějí větší flexibilitu pro správu oken na svých velkoplošných obrazovkách zařízení.