V ideálním světě by se mobilní aplikace spustila okamžitě. Načtení všech potřebných dat ale chvíli trvá. Telefony jsou sice čím dál tím výkonnější, aplikace s nimi však v požadavcích na výkon drží krok. Spuštění tak stále trvá i několik sekund. V tomto krátkém okně má hlavní roli splash screen. Každý okamžik ovlivňuje výsledný dojem a právě úvodní obrazovka může rozhodnout, jestli uživatel aplikaci frustrovaně odinstaluje, nebo si ji naopak oblíbí.
Splash screen je součástí celkového zážitku a podvědomě tvoří dojem, který si uživatelé z vaší aplikace odnesou. I jednoduchý splash screen s logem působí lépe než prázdná obrazovka nebo načítací kolečko. Pokud použijete kombinaci loga a sloganu, uživatelé budou vnímat čekání na spuštění aplikace jako kratší a ochotněji počkají i při delším načítání.
Splash screen tak rozhodně není zbytečná výplň. Je to prostor, ve kterém můžete ovlivnit jak lidé vnímají vaši značku. A právě při tvorbě brandingu aplikace je splash screen často zásadní prvek.
Zobrazuje se na něm logo, barvy značky a někdy i vizuální prvky a texty, které utvářejí první dojem. Jde o zásadní prvek při brandingu aplikace a pokud se zaměřujete na uživatelské rozhraní (UI), uživatelskou zkušenost (UX) a design, neměli byste ho podcenit.
Uživatel ho vidí jen pár sekund, přesto jde teoreticky o skvělou plochu pro reklamní sdělení. A skutečně se nám občas stane, že chce klient splash screen vyměnit a komunikovat na úvodní obrazovce krátkodobou akci. To ale není technicky možné.
Splash screen je napevno zabudovaný do instalačního balíčku aplikace (tzv. resource bundlu) a po instalaci ho nelze upravit. Proto je změna úvodní obrazovky možná pouze při aktualizaci nebo nové instalaci aplikace.
Splash screen je stejný pro všechny uživatele dané verze a nelze ho ani dynamicky měnit podle skupin (například B2B vs. B2C, noví vs. vracející se uživatelé atd.).
Pokud chcete na uživatele opravdu zapůsobit, můžete místo statického loga a sloganu zvolit animaci. Ta ale není tak jednoduchá, jak by se mohlo zdát.
Ukázka animovaného splash screenu
Animovaný splash screen totiž vždy začíná statickým obrázkem. Obvykle jde o první snímek animace, který se zobrazí před plným načtením aplikace. Jakmile je aplikace připravená, může se splash přepnout na skutečnou animaci.
To platí především pro iOS, kde je animace technicky oddělená od launch screenu. U Androidu jsou možnosti volnější a animaci lze částečně spouštět i dřív, i zde ovšem platí určitá omezení.
Délka splash screenu by se měla odvíjet především od potřeb aplikace. Platformy pro vývoj mobilních aplikací jako Cordova, Ionic nebo Capacitor nabízejí několik přístupů:
Ať už zvolíte jakoukoliv možnost, myslete na to, že splash screen by neměl zdržovat a působit jako samoúčelná animace.
Hravý atmosferický splash screen je super, ale uživatele víc zajímá samotná aplikace.
Při prvním spuštění si aplikace často stahuje větší množství dat (mapy, katalogy, ceníky…). Vývojář se musí rozhodnout, jestli tento proces schová pod splash screen, nebo uživatele rovnou pustí do aplikace a data načítá na pozadí.
Jak to děláme my?
Uživatel může s aplikací začít částečně pracovat, zatímco sleduje progress bar, který ukazuje průběh načítání.
Důležité je, aby se něco dělo a uživatel neměl pocit, že aplikace zamrzla.
Minulost splash screenů je stejně stará jako historie chytrých telefonů. Na iOS byl splash screen vždy povinný a zobrazoval se automaticky; operační systém ho vykresloval ještě před spuštěním aplikace.
U Androidu byla situace trochu složitější. Splash screen jsme řešili softwarově, a zobrazoval se až po úplném spuštění aplikace.
Vývojáři se snažili toto zpoždění obcházet různými technikami. Často jsme používali malý loader nebo prázdnou aktivitu, která se spustila před načtením aplikace. Výsledek ale většinou za moc nestál, proto se splash screeny na Androidu (s výjimkou éry Flashe) zanedbávaly.
Dneska je to se splash screeny celkem snadné. Nemusíme řešit velikost ani rozlišení telefonu. Vše se generuje programově a velikost se mění automaticky podle toho, co má uživatel za telefon.
V minulosti to byla jiná piplačka. Splash screen se vkládal zvlášť pro každé rozlišení formou bitmapy. Bitmapy zabíraly hodně místa, protože nebylo možné použít komprimované formáty jako JPEG. V úvahu přicházel jen bezztrátový PNG.
Kvůli této prostorové náročnosti si jeden čas iOS komprimoval klasické PNG do vlastního proprietárního formátu – ten sice zabíral méně místa, ale nešel běžně zobrazit ani upravit.
DPI | Landscape (px) | Portrait (px) |
---|---|---|
LDPI | 320×240 | 240×320 |
MDPI | 480×320 | 320×480 |
HDPI | 800×480 | 480×800 |
XHDPI | 1280×720 | 720×1280 |
XXHDPI | 1920×1080 | 1080×1920 |
XXXHDPI | 2560×1440 | 1440×2560 |
U Androidu se velikosti splashů nedělaly podle velikosti displeje, ale podle jeho rozlišení.
Soubor | Rozměry (px) | Zařízení / Popis |
---|---|---|
Default.png | 320 × 480 | iPhone 3GS, Portrait |
Default@2x.png | 640 × 960 | iPhone 4 / 4S, Retina, Portrait |
Default-568h@2x.png | 640 × 1136 | iPhone 5 / 5S / SE (1. gen), Portrait |
Default-667h@2x.png | 750 × 1334 | iPhone 6 / 6S / 7 / 8 |
Default-736h@3x.png | 1242 × 2208 | iPhone 6 Plus / 6S Plus / 7 Plus |
Default-Landscape-736h@3x.png | 2208 × 1242 | iPhone 6 Plus, Landscape |
Default-Portrait.png | 768 × 1024 | iPad (non-Retina), Portrait |
Default-Portrait@2x.png | 1536 × 2048 | iPad Retina, Portrait |
Default-Landscape.png | 1024 × 768 | iPad (non-Retina), Landscape |
Default-Landscape@2x.png | 2048 × 1536 | iPad Retina, Landscape |
LaunchImage-700@2x.png | 640 × 960 | iOS 7, Retina devices (iPhone 4) |
LaunchImage-700-568h@2x.png | 640 × 1136 | iOS 7, iPhone 5 |
LaunchImage-800-667h@2x.png | 750 × 1334 | iOS 8, iPhone 6 |
LaunchImage-800-Portrait-736h@3x.png | 1242 × 2208 | iOS 8, iPhone 6 Plus, Portrait |
LaunchImage-800-Landscape-736h@3x.png | 2208 × 1242 | iOS 8, iPhone 6 Plus, Landscape |
Starý systém pomocí statických bitmap (např. Default-568h@2x.png) je dnes nejen deprecated, ale není akceptovaný pro nové aplikace v App Store.
Na iOS se správným zobrazením designu nebyl nikdy problém. Jasně daná velikost displejů umožňovala připravit splash přesně na míru.
S Androidem to bylo složitější. Zařízení se liší nejen velikostí displeje, ale i poměrem stran a hustotou pixelů (DPI). Pokud měl splash zapůsobit, museli jsme se tomu přizpůsobit.
Pracovalo se se třemi základními postupy:
Postupem času byla vytvořena šablona, která vyznačovala zóny s nejvyšší pravděpodobností zobrazení na nejběžněji používaných zařízeních.
Cílem bylo zajistit, aby prvky, jako logo nebo název aplikace, byly vždy v bezpečné zóně uprostřed obrazovky, která byla zaručeně viditelná na všech telefonech. Okrajové části pak mohly být oříznuty podle specifikací konkrétního zařízení.
Šablona pro ořez, která vyznačuje zóny s nejvyšší pravděpodobností zobrazení na nejběžněji používaných zařízeních.
V praxi to fungovalo tak, že grafik podle této šablony připravil master obrázek a z něj se skriptem vyřezaly potřebné rozměry.
Existovaly na to přímo nástroje jako například „ionic resources“, který z master obrázku vytvořil všechny běžně používané rozměry.
Dnes je to naštěstí o něco jednodušší.
Dnešní splash screeny už nejsou o ručním ladění bitmap pro každý model telefonu. Na Androidu se používá moderní SplashScreen API, které automaticky přizpůsobí zobrazení různým zařízením – stačí definovat vektorové logo a barvu pozadí.
Definuje vzhled celé aplikace a speciální téma pro splash screen.
<!-- res/values/themes.xml -->
<resources>
<!-- Běžné téma aplikace -->
<style name="Theme.MyApp" parent="Theme.Material3.DayNight.NoActionBar" />
<!-- Splash téma -->
<style name="Theme.MyApp.Splash" parent="Theme.SplashScreen">
<!-- Pozadí splash screenu -->
<item name="windowSplashScreenBackground">@color/white</item>
<!-- Vektorová (nebo bitmapová) ikona pro animaci -->
<item name="windowSplashScreenAnimatedIcon">@drawable/ic_logo</item>
<!-- Barva pozadí kolem ikony -->
<item name="windowSplashScreenIconBackgroundColor">@color/black</item>
</style>
</resources>
Obsahuje definice barev použitých v celé aplikaci, včetně splash screenu.
<!-- res/values/colors.xml -->
<resources>
<!-- Definice základních barev -->
<color name="white">#FFFFFF</color>
<color name="black">#000000</color>
</resources>
Nastavuje, že hlavní aktivita při spuštění používá splash téma.
<!-- AndroidManifest.xml -->
<application
android:theme="@style/Theme.MyApp">
<activity
android:name=".MainActivity"
android:exported="true"
android:theme="@style/Theme.MyApp.Splash">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Vektorový (SVG-like) obrázek loga, který se animuje jako splash ikona.
<!-- res/drawable/ic_logo.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#000000"
android:pathData="M12,2 L2,22h20L12,2z"/>
</vector>
U iOS se místo sady statických obrázků pracuje s LaunchScreen.storyboard, který se škáluje podle potřeby.
Výsledek? Méně práce, konzistentní výsledky.
Stejně jako u Androidu platí, že klíčové informace patří na střed. Zbytek můžete nechat systému – ořezání nebo natažení se řeší automaticky.
Staré časy s desítkami PNG a obavou, jestli se logo zobrazí správně i řediteli s netradičním telefonem, už naštěstí patří minulosti.
A jak to vypadá v praxi?
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB"
launchScreen="YES" useSafeAreas="YES">
<scenes>
<!-- Launch Screen View Controller -->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<view key="view" contentMode="scaleAspectFill">
<subviews>
<!-- Hlavní imageView se splash obrázkem -->
<imageView id="snD-IY-ifK" image="Splash">
<rect key="frame" x="0" y="0" width="375" height="667"/>
</imageView>
</subviews>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder"
id="iYj-Kq-Ea1" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
<resources>
<image name="Splash" width="1366" height="1366"/>
</resources>
</document>
Výsledek vypadá takto:
Splash screen v Launch Screen Storyboard
Na iOS hraje roli i to, jaké splash screeny aplikace obsahuje – podle toho systém určuje, pro jaká zařízení je aplikace určená. Každý obrázek má své přesné jméno a místo ve struktuře .ipa souboru.
A pokud se pracuje s původními Apple PNG, může být potřeba je nejdřív dekódovat – jejich formát je komprimovaný a běžné nástroje ho neotevřou.
Zkušený tým poznáte nejen podle vizuálu, ale hlavně podle toho, jak si poradí s technickými detaily i v komplikovanějších případech.
Přestože se dnes splash screeny řeší elegantně přes systémová API, občas narazíte na výjimky – typicky při převodu starší aplikace. V takovém případě může dávat smysl pracovat s bitmapou přesně na míru. V tuhle chvíli se opět hodí stará dobrá 1:1 šablona s vyznačenými bezpečnými zónami a ořezovými okraji – nejdůležitější obsah patří doprostřed, protože nikdy nevíme, co se odkrojí.
Tip: Od Androidu 12 vývojáři využívají SplashScreen API, které se postará o zobrazení úvodní obrazovky systémově. Ale pokud pracujete se starší aplikací (Android 11 a níž), je potřeba splash screen řešit ručně – například přes samostatnou SplashActivity, která zobrazí layout a po inicializaci přesměruje dál.
Když pracujeme se splash screeny, nemůžeme zapomenout na lokalizaci. Pokud obrázek obsahuje texty nebo jiné kulturní artefakty, je nutné, aby se přizpůsobil jazyku a regionu uživatele.
Pokud není splashe možné vytvářet dynamicky, je potřeba zvládnout správu více obrázků – několik pro iOS a několik pro Android.
Vytvoření a následné upravování tolika verzí může být časově náročné, a pokud do toho vstoupí lokalizace, stává se úkol ještě složitějším.
Tip: Některé nástroje (např. ionic resources) usnadňují generování splash screenů z jednoho obrázku pro více platforem, ale pozor, tyto nástroje se rychle mění a některé příkazy mohou být zastaralé. Vyplatí se vždy zkontrolovat aktuální dokumentaci.
V takovém případě se hodí automatizace – splash screeny lze programově generovat, aby se přizpůsobily různým jazykům, rozlišením a poměrům stran. To umožňuje rychlé změny ve všech verzích obrázku, a to i při přidání nových jazyků nebo při úpravách designu.
V aplikaci Workshop jsme použili skript v ImageMagick, který umožnil automatizovanou tvorbu splash screenů.
Obrázek měl v patičce umístěné informace, logo ve středu a pozadí se dynamicky roztahovalo.
Tato programovaná kompozice byla výhodná, protože zajistila, že všechny verze splashe byly konzistentní, a přitom se snadno upravovaly podle potřeby.
Když jsme měnili texty nebo jiný obsah, skript vše automaticky přizpůsobil novým požadavkům.Tento přístup by mohl být vhodný pro jakýkoli projekt, kde je potřeba spravovat více jazykových verzí nebo dynamických změn v designu, bez nutnosti ručně upravovat každý obrázek.
Co se v aplikaci při zobrazení splash screenu děje a jak vypadá jeho tvorba v praxi?
Splash screen neplní jen vizuální funkci, ale kryje také technickou přípravu aplikace. Například v aplikaci CNG stanice je potřeba během spuštění:
Zásadním bodem je požadavek na oprávnění k poloze – ten se musí zobrazit ve vizuálním kontextu, aby uživatel chápal, proč aplikace jeho polohu potřebuje. To ovlivňuje časování a schování splashe. Není to triviální a pokud s tím vývojář nemá zkušenost, snadno vznikají chyby.
Ukázka splash screenu pro klienta CzechTrade.
Splash pro CzechTrade nemá komplikovanou animaci, ale je třeba jej vygenerovat 14 různých verzí.
Na splash screenu se ukazuje.
Pomocí skriptu v Bash + ImageMagick se automaticky generovalo 14 verzí splash screenů, každá v jiném rozměru:
#!/bin/bash -x
splash () {
w=$(( $2 * 3 / 4 ))
convert \
splash-background.jpg \
-resize $2 \
-extent $2x$1 \
\( -size $2x$1 gradient:#000000-#888888 \) \
-compose Blend \
-composite \
\( splash-top.png -resize $w \) \
-gravity north \
-compose over \
-composite \
\( splash-bottom.png -resize $w \) \
-gravity south \
-compose over \
-composite \
splash$2x$1.png
}
splash 1536 2008
splash 1536 2048
splash 768 1004
splash 480 800
splash 320 480
splash 640 960
splash 200 320
splash 640 1136
splash 720 1280
splash 750 1334
splash 768 1024
splash 768 1280
splash 1152 1920
splash 1242 2208
Výstupem je následující proces:
Splash screeny jsou sice vidět jen krátký moment, ale dokáží udělat velký první dojem. Nejenže vypadají skvěle, ale také zlepšují celkový dojem a funkčnost aplikace.
Při tvorbě splash screenu se zaměřte na to, aby ladil s celkovým uživatelským zážitkem, a nevyužívejte ho pro příliš invazivní marketing. Když to uděláte správně, bude to malý, ale důležitý prvek, který zlepší celkový dojem z aplikace.
blablabl