Vytváření prostředků pro různé obrazovky
Samotný Android běží na mnoha různých zařízeních, přičemž každá má širokou škálu rozlišení, velikostí obrazovky a hustoty obrazovky. Android provede škálování a změnu velikosti, aby vaše aplikace fungovala na těchto zařízeních, ale může to vést k neoptimálnímu uživatelskému prostředí. Obrázky se například můžou zobrazovat rozmazaně nebo se můžou umístit podle očekávání v zobrazení.
Koncepty
Pro podporu více obrazovek je důležité pochopit několik pojmů a konceptů.
Velikost obrazovky – velikost fyzického prostoru pro zobrazení aplikace
Hustota obrazovky – počet pixelů v libovolné dané oblasti na obrazovce. Typická měrná jednotka je tečky na palec (dpi).
Rozlišení – celkový počet pixelů na obrazovce. Při vývoji aplikací není rozlišení tak důležité jako velikost a hustota obrazovky.
Pixel nezávislý na hustotě (dp) – virtuální měrná jednotka umožňující návrh rozložení nezávisle na hustotě. Tento vzorec slouží k převodu dp na pixely obrazovky:
px = dp × dpi ÷ 160
Orientace – Orientace obrazovky se považuje za orientaci na šířku, pokud je širší, než je vysoká. Orientace na výšku je naopak, když je obrazovka vyšší, než je široká. Orientace se může během životnosti aplikace změnit, když uživatel zařízení otočí.
Všimněte si, že první tři z těchto konceptů jsou vzájemně propojené – zvětšení rozlišení bez zvětšení hustoty zvýší velikost obrazovky. Pokud se ale zvětší hustota i rozlišení, velikost obrazovky zůstane beze změny. Tento vztah mezi velikostí obrazovky, hustotou a rozlišením komplikuje podporu obrazovky rychle.
Aby bylo možné tuto složitost vyřešit, architektura Androidu preferuje použití pixelů nezávislých na hustotě (dp) pro rozložení obrazovky. Když použijete pixely nezávislé na hustotě, prvky uživatelského rozhraní se uživateli zobrazí, že mají stejnou fyzickou velikost na obrazovkách s různými hustotami.
Podpora různých velikostí a hustot obrazovek
Android zpracovává většinu práce a správně vykresluje rozložení pro každou konfiguraci obrazovky. Existuje však několik akcí, které můžou systému pomoct.
Použití pixelů nezávislých na hustotě místo skutečných pixelů v rozloženích je ve většině případů dostatečné k zajištění nezávislosti hustoty. Android škáluje kreslicí zařízení za běhu na odpovídající velikost. Je však možné, že měřítko způsobí, že se rastrové obrázky budou zobrazovat rozmazaně. Pokud chcete tento problém obejít, zadejte alternativní zdroje pro různé hustoty. Při navrhování zařízení pro více rozlišení a hustoty obrazovky se může snadněji začít s obrázky s vyšším rozlišením nebo hustotou a pak vertikálně snížit kapacitu.
Deklarujte podporovanou velikost obrazovky.
Deklarováním velikosti obrazovky zajistíte, že aplikaci můžou stáhnout jenom podporovaná zařízení. Toho dosáhnete nastavením prvku supports-screens v souboru AndroidManifest.xml . Tento prvek se používá k určení velikosti obrazovek, které aplikace podporuje. Daná obrazovka se považuje za podporovanou, pokud může aplikace správně umístit rozložení pro vyplnění obrazovky. Pomocí tohoto elementu manifestu se aplikace nezobrazí v Google Play pro zařízení, která nesplňují specifikace obrazovky. Aplikace se ale bude pořád spouštět na zařízeních s nepodporovanými obrazovkami, ale rozložení se můžou zobrazovat rozmazaně a pixelovaná.
Podporované obrazovky šest jsou deklarovány v souboru Properites/AndroidManifest.xml řešení:
Upravte AndroidManifest.xml tak, aby zahrnovaly obrazovky podporující:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1"
android:versionName="1.0"
package="HelloWorld.HelloWorld">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="27" />
<supports-screens android:resizable="true"
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true" />
<application android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:theme="@style/AppTheme">
</application>
</manifest>
Poskytnutí alternativních rozložení pro různé velikosti obrazovek
Alternativní rozložení umožňují přizpůsobit zobrazení pro konkrétní velikost obrazovky, změnit umístění nebo velikost prvků uživatelského rozhraní komponenty.
Počínaje rozhraním API Level 13 (Android 3.2) jsou velikosti obrazovek ve prospěch použití kvalifikátoru swNdp. Tento nový kvalifikátor deklaruje velikost místa, které dané rozložení potřebuje. Doporučuje se, aby aplikace, které mají běžet na Androidu 3.2 nebo vyšší, používaly tyto novější kvalifikátory.
Pokud například rozložení vyžadovalo minimálně 700 dp šířky obrazovky, alternativní rozložení by přešlo do složky layout-sw700dp:
Tady jsou některá čísla pro různá zařízení:
Typický telefon – 320 dp: typický telefon
Tablet 5" / "tweener" zařízení – 480 dp: například Samsung Note
7" tablet - 600 dp: například Barnes & Noble Nook
Tablet 10" – 720 dp: například Motorola Xoom
Pro aplikace, které cílí na úrovně rozhraní API až 12 (Android 3.1), by rozložení měla jít do adresářů, které používají kvalifikátory malé normální//velké/xlarge jako generalizace různých velikostí obrazovky, které jsou dostupné ve většině zařízení. Na následujícím obrázku jsou například alternativní prostředky pro čtyři různé velikosti obrazovek:
Následuje porovnání toho, jak starší kvalifikátory obrazovky úrovně 13 úrovně před rozhraním API porovnávají s pixely nezávislými na hustotě:
426 dp x 320 dp je malý
470 dp x 320 dp je normální
640 dp x 480 dp je velký
960 dp x 720 dp je xlarge
Novější kvalifikátory velikosti obrazovky v rozhraní API úrovně 13 a vyšší mají vyšší prioritu než starší kvalifikátory obrazovky úrovní rozhraní API 12 a nižší. U aplikací, které budou přesahovat staré a nové úrovně rozhraní API, může být nutné vytvořit alternativní prostředky pomocí obou sad kvalifikátorů, jak je znázorněno na následujícím snímku obrazovky:
Poskytnutí různých rastrových obrázků pro různé hustoty obrazovky
I když Android podle potřeby škáluje rastrové obrázky pro zařízení, nemusí se rastrové obrázky elegantně vertikálně navýšit nebo snížit: mohou se stát přibližným nebo rozmazaným. Poskytnutí rastrových obrázků vhodných pro hustotu obrazovky tento problém zmírní.
Například následující obrázek je příkladem problémů s rozložením a vzhledem, ke kterým může dojít, když nejsou k dispozici prostředky určující hustotu.
Porovnejte ho s rozložením navrženým pomocí prostředků specifických pro hustotu:
Vytváření různých prostředků hustoty pomocí Android Asset Studia
Vytvoření těchto rastrových obrázků různých hustot může být trochu zdlouhavé. Společnost Google vytvořila online nástroj, který může snížit některé tedium spojené s vytvářením těchto rastrových obrázků označovaných jako Android Asset Studio.
Tento web vám pomůže s vytvářením rastrových obrázků, které cílí na čtyři běžné hustoty obrazovky poskytnutím jednoho obrázku. Android Asset Studio pak vytvoří rastrové obrázky s některými vlastními nastaveními a pak je umožní stáhnout jako soubor ZIP.
Tipy pro více obrazovek
Android běží na počtu zařízení a kombinace velikostí obrazovky a hustoty obrazovky se může zdát ohromující. Následující tipy vám můžou pomoct minimalizovat úsilí potřebné k podpoře různých zařízení:
Návrh a vývoj pouze pro to, co potřebujete – existuje mnoho různých zařízení, ale některé existují ve výjimečných formách faktory, které mohou vyžadovat značné úsilí při návrhu a vývoji. Řídicí panel Velikost obrazovky a hustota je stránka od Googlu, která poskytuje data o rozpisu matice hustoty obrazovky/velikosti obrazovky. Tento rozpis poskytuje přehled o tom, jak vyvíjet úsilí na podpůrných obrazovkách.
Místo pixelů používejte DPs – pixely se při změnách hustoty obrazovky stanou problematicky. Nezakódujte hodnoty pixelů. Vyhněte se pixelům ve prospěch dp (pixely nezávislé na hustotě).
Vyhněte se funkci AbsoluteLayoutvšude, kde je to možné – je zastaralá v rozhraní API úrovně 3 (Android 1.5) a bude mít za následek brittle layouts. Nemělo by se používat. Místo toho zkuste použít flexibilnější widgety rozložení, jako je LinearLayout, RelativeLayout nebo nový GridLayout.
Jako výchozí vyberte jednu orientaci rozložení – například místo poskytnutí alternativních prostředků, rozložení a portu rozložení, umístění prostředků pro orientaci na šířku a prostředků pro orientaci na výšku na port rozložení.
Použití LayoutParams pro výšku a šířku – Při definování prvků uživatelského rozhraní v souboru rozložení XML bude mít aplikace pro Android používající hodnoty wrap_content a fill_parent větší úspěch, aby se zajistil správný vzhled na různých zařízeních než použití jednotek nezávislých na pixelech nebo hustotě. Tyto hodnoty dimenzí způsobují, že Android podle potřeby škáluje rastrové obrázky. Z tohoto důvodu jsou jednotky nezávislé na hustotě nejvhodnější pro zadání okrajů a odsazení prvků uživatelského rozhraní.
Testování více obrazovek
Aplikace pro Android musí být testována ve všech konfiguracích, které budou podporovány. V ideálním případě by se zařízení měla testovat na samotných zařízeních, ale v mnoha případech to není možné ani praktické. V tomto případě bude užitečné použít emulátor a nastavení virtuálních zařízení s Androidem pro každou konfiguraci zařízení.
Sada Android SDK poskytuje některé skiny emulátoru, které se dají použít k vytvoření AVD, replikují velikost, hustotu a rozlišení mnoha zařízení. Mnoho dodavatelů hardwaru podobně poskytuje skiny pro svá zařízení.
Další možností je použít služby testovací služby třetí strany. Tyto služby použijí APK, spustí ho na mnoha různých zařízeních a pak poskytnou zpětnou vazbu, jak aplikace fungovala.