Alternativní prostředky

Alternativní prostředky jsou prostředky, které cílí na konkrétní zařízení nebo konfiguraci za běhu, jako je aktuální jazyk, konkrétní velikost obrazovky nebo hustota pixelů. Pokud se Android může shodovat s prostředkem, který je konkrétnější pro konkrétní zařízení nebo konfiguraci než výchozí prostředek, použije se tento prostředek. Pokud nenajde alternativní prostředek, který odpovídá aktuální konfiguraci, načtou se výchozí prostředky. Jak Android rozhodne, jaké prostředky bude aplikace používat, se podrobněji dozvíte níže v části Umístění prostředků.

Alternativní prostředky jsou uspořádány jako podadresáři uvnitř složky Resources podle typu prostředku, stejně jako výchozí prostředky. Název alternativního podadresáře prostředků je ve formátu: Kvalifikátor ResourceType-

Kvalifikátor je název, který identifikuje konkrétní konfiguraci zařízení. V názvu může být více než jeden kvalifikátor, z nichž každý je oddělený pomlčkou. Následující snímek obrazovky například ukazuje jednoduchý projekt, který obsahuje alternativní prostředky pro různé konfigurace, jako je národní prostředí, hustota obrazovky, velikost obrazovky a orientace:

Při přidávání kvalifikátorů do typu prostředku platí následující pravidla:

  1. Může existovat více než jeden kvalifikátor, přičemž každý kvalifikátor je oddělený pomlčkou.

  2. Kvalifikátory se možná zadává jenom jednou.

  3. Kvalifikátory musí být v pořadí, v jakém se zobrazují v následující tabulce.

Možné kvalifikátory jsou uvedeny níže pro referenci:

  • MCC a MNCkód mobilní země (MCC) a volitelně kód mobilní sítě (MNC). SIM karta poskytne MCC, zatímco síť, ke které je zařízení připojené, poskytne MNC. I když je možné cílit na národní prostředí pomocí kódu mobilní země, doporučuje se použít kvalifikátor jazyka uvedený níže. Například pro cílení prostředků do Německa by kvalifikátor byl mcc262. Chcete-li cílit na prostředky pro T-Mobile v USA, kvalifikátor je mcc310-mnc026. Úplný seznam kódů mobilních zemí a kódů mobilních sítí naleznete v tématu http://mcc-mnc.com/.

  • Language – dvoumísmenný kód jazyka ISO 639-1 a volitelně následuje dvoumísmenný kód oblasti ISO-3166-alfa-2. Pokud jsou kvalifikátory kvalifikátory k dispozici, jsou oddělené čárkou -r. Pokud chcete například cílit na národní prostředí francouzštiny, použije se kvalifikátor.fr Aby bylo možné cílit na francouzsko-kanadské národní prostředí, fr-rCA bylo by použito. Úplný seznam kódů jazyků a kódů oblastí naleznete v části Kódy pro reprezentaci názvů jazyků a zemí a prvků kódu.

  • Nejmenší šířka – Určuje nejmenší šířku obrazovky, na které se má aplikace spustit. Podrobnější informace najdete v článku Vytváření prostředků pro různé obrazovky. K dispozici na úrovni rozhraní API 13 (Android 3.2) a vyšší. Kvalifikátor sw320dp se například používá pro cílová zařízení, jejichž výška a šířka je alespoň 320dp.

  • Dostupná šířka – minimální šířka obrazovky ve formátu wNdp, kde N je šířka v nezávislých pixelech hustoty. Tato hodnota se může změnit při obměně zařízení uživatelem. Podrobnější informace najdete v článku Vytváření prostředků pro různé obrazovky. K dispozici na úrovni rozhraní API 13 (Android 3.2) a vyšší. Příklad: Kvalifikátor w720dp se používá pro cílová zařízení, která mají šířku nejméně 720dp.

  • Dostupná výška – minimální výška obrazovky ve formátu hNdp, kde N je výška v dp. Tato hodnota se může změnit při obměně zařízení uživatelem. Podrobnější informace najdete v článku Vytváření prostředků pro různé obrazovky. K dispozici na úrovni rozhraní API 13 (Android 3.2) a vyšší. Například kvalifikátor h720dp se používá pro cílová zařízení, která mají výšku nejméně 720dp.

  • Velikost obrazovky – Tento kvalifikátor je generalizace velikosti obrazovky, pro kterou jsou tyto prostředky určené. Podrobněji je popsáno v části Vytváření prostředků pro různé obrazovky. Možné hodnoty jsou small, normal, largea xlarge. Přidáno v rozhraní API úrovně 9 (Android 2.3/Android 2.3.1/Android 2.3.2)

  • Aspekt obrazovky – to je založené na poměru stran, nikoli na orientaci obrazovky. Dlouhá obrazovka je širší. Přidáno do rozhraní API úrovně 4 (Android 1.6). Možné hodnoty jsou dlouhé a nelong.

  • Orientace obrazovky – orientace na výšku nebo na šířku obrazovky To se může změnit během životnosti aplikace. Možné hodnoty jsou port a land.

  • Dokovací režim – pro zařízení v doku pro auto nebo stolní dok. Přidáno do rozhraní API úrovně 8 (Android 2.2.x). Možné hodnoty jsou car a desk.

  • Noční režim – určuje, jestli aplikace běží v noci nebo v den. To se může během životnosti aplikace změnit a má vývojářům poskytnout příležitost používat tmavší verze rozhraní v noci. Přidáno do rozhraní API úrovně 8 (Android 2.2.x). Možné hodnoty jsou night a notnight.

  • Hustota pixelů obrazovky (dpi) – počet pixelů v dané oblasti na fyzické obrazovce. Obvykle vyjádřeno jako tečky na palec (dpi). Možné hodnoty jsou:

    • ldpi – obrazovky s nízkou hustotou.

    • mdpi – Obrazovky se střední hustotou

    • hdpi – obrazovky s vysokou hustotou

    • xhdpi – Obrazovky s vysokou hustotou navíc

    • nodpi – Prostředky, které se nemají škálovat

    • tvdpi – Představeno v rozhraní API úrovně 13 (Android 3.2) pro obrazovky mezi mdpi a hdpi.

  • Typ dotykové obrazovky – Určuje typ dotykové obrazovky, které zařízení může mít. Možné hodnoty jsou notouch (bez dotykové obrazovky), stylus (rezistivní dotyková obrazovka vhodná pro pero) a finger (dotyková obrazovka).

  • Dostupnost klávesnice – Určuje, jaký typ klávesnice je k dispozici. To se může změnit během životnosti aplikace – například když uživatel otevře hardwarovou klávesnici. Možné hodnoty jsou:

    • keysexposed – Zařízení má k dispozici klávesnici. Pokud není povolená softwarová klávesnice, použije se jenom při otevření hardwarové klávesnice.

    • keyshidden – Zařízení má hardwarovou klávesnici, ale je skrytá a není povolena žádná softwarová klávesnice.

    • keyssoft – zařízení má povolenou softwarovou klávesnici.

  • Primární metoda zadávání textu – Slouží k určení typů hardwarových klíčů, které jsou k dispozici pro vstup. Možné hodnoty jsou:

    • nokeys – Pro vstup neexistují žádné hardwarové klíče.

    • qwerty – K dispozici je klávesnice qwerty.

    • 12key – K dispozici je 12 klávesová hardwarová klávesnice

  • Dostupnost navigačního klíče – Pro 5cestnou nebo d-padovou navigaci (směrový panel) je k dispozici. To se může během životnosti vaší aplikace změnit. Možné hodnoty jsou:

    • navexposed – pro uživatele jsou k dispozici navigační klávesy

    • navhidden – navigační klávesy nejsou k dispozici.

  • Primární metoda navigace bez dotykového ovládání – druh navigace dostupný na zařízení. Možné hodnoty jsou:

    • nonav – jediným dostupným navigačním zařízením je dotyková obrazovka

    • dpad – pro navigaci je k dispozici d-pad (směrový panel).

    • trackball – zařízení má trackball pro navigaci

    • wheel – neobvyklý scénář, kdy je k dispozici jedno nebo více směrových kol

  • Verze platformy (úroveň rozhraní API) – úroveň rozhraní API podporovaná zařízením ve formátu vN, kde N je úroveň rozhraní API, na kterou cílí. Například v11 bude cílit na zařízení s rozhraním API úrovně 11 (Android 3.0).

Podrobnější informace o kvalifikátorech prostředků najdete na webu Vývojáři pro Android.

Jak Android určuje, jaké prostředky použít

Je velmi možné a pravděpodobné, že aplikace pro Android bude obsahovat mnoho prostředků. Je důležité pochopit, jak Android vybere prostředky pro aplikaci, když běží na zařízení.

Android určuje základ prostředků tím, že iteruje následující test pravidel:

  • Odstraňte protichůdné kvalifikátory – například pokud je orientace zařízení na výšku, všechny adresáře prostředků na šířku budou odmítnuty.

  • Ignorujte kvalifikátory, které nejsou podporované – ne všechny kvalifikátory jsou dostupné pro všechny úrovně rozhraní API. Pokud adresář prostředků obsahuje kvalifikátor, který zařízení nepodporuje, bude tento adresář prostředků ignorován.

  • Identifikujte další kvalifikátor s nejvyšší prioritou – odkazem na tabulku výše vyberte další kvalifikátor s nejvyšší prioritou (shora dolů).

  • Ponechte všechny adresáře prostředků pro kvalifikátor – pokud existují nějaké adresáře prostředků, které odpovídají kvalifikátoru výše, vyberte další kvalifikátor s nejvyšší prioritou (shora dolů).

Tato pravidla jsou také znázorněna v následujícím vývojovém diagramu:

Resources flowchart

Když systém hledá prostředky specifické pro hustotu a nemůže je najít, pokusí se vyhledat další prostředky specifické pro hustotu a škálovat je. Android nemusí nutně používat výchozí prostředky. Když například hledáte prostředek s nízkou hustotou a není k dispozici, může Android vybrat verzi prostředku s vysokou hustotou nad výchozími nebo středními prostředky. Dělá to proto, že prostředek s vysokou hustotou je možné vertikálně snížit pomocí faktoru 0,5, což bude mít za následek méně problémů s viditelností než vertikální snížení kapacity prostředku střední hustoty, který by vyžadoval faktor 0,75.

Představte si například aplikaci, která má následující nakreslitelné adresáře prostředků:

drawable
drawable-en
drawable-fr-rCA
drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi
drawable-port-ldpi
drawable-port-notouch-12key

Aplikace se teď spouští na zařízení s následující konfigurací:

  • Národní prostředí – en-GB
  • Orientace – port
  • Hustota obrazovky – hdpi
  • Typ dotykové obrazovky – notouch
  • Primární metoda zadávání – 12klíč

Začněme tím, že francouzské zdroje jsou eliminovány, protože jsou v konfliktu s národním prostředím en-GB, které nás opouštějí:

drawable
drawable-en
drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi
drawable-port-ldpi
drawable-port-notouch-12key

Dále je první kvalifikátor vybrán z tabulky kvalifikátorů výše: MCC a MNC. Neexistují žádné adresáře prostředků, které obsahují tento kvalifikátor, takže kód MCC/MNC je ignorován.

Je vybrán další kvalifikátor, což je Jazyk. Existují prostředky, které odpovídají kódu jazyka. Všechny adresáře prostředků, které neodpovídají kódu en jazyka, jsou odmítnuty, takže seznam prostředků je nyní:

drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi

Další kvalifikátor, který je k dispozici, je určen pro orientaci obrazovky, takže všechny adresáře prostředků, které neodpovídají orientaci port obrazovky, jsou eliminovány:

drawable-en-port
drawable-en-port-ldpi

Dále je kvalifikátor hustoty obrazovky, ldpicož vede k vyloučení jednoho dalšího adresáře prostředků:

drawable-en-port-ldpi

V důsledku tohoto procesu bude Android používat nakreslitelné prostředky v adresáři drawable-en-port-ldpi prostředků zařízení.

Poznámka:

Kvalifikátory velikosti obrazovky poskytují jednu výjimku pro tento proces výběru. Pro Android je možné vybrat prostředky, které jsou navržené pro menší obrazovku než aktuální zařízení. Například zařízení s velkou obrazovkou může používat prostředky, které poskytují obrazovku s normální velikostí. Opačná hodnota však není pravdivá: stejné velké zařízení s obrazovkou nebude používat prostředky poskytnuté pro obrazovku xlarge. Pokud Android nemůže najít sadu prostředků, která odpovídá dané velikosti obrazovky, aplikace se chybově ukončí.