Czy i jak robić splash screeny w aplikacjach Android?

By Lipiec 17, 2015Android, Development

W kolejnej aktualizacji specyfikacji Material Design od Google pojawił się wątek splash screenów. Jest to pewnego rodzaju zaskoczenie, gdyż jeszcze jakiś czas temu było to rozwiązanie zupełnie odradzane.

Splash screen – Material Design

Jeżeli Twoja aplikacja wykonuje jakieś czynności w Application.onCreate() i nie była wcześniej w pamięci, może minąć trochę czasu, pomiędzy kliknięciem w ikonę aplikacji a wywołaniem Activity.onCreate() co będzie skutkowało wyświetleniem pustego ekranu. Ten czas można wykorzystać, aby pokazać splash screen.

Zdecydowanie NIE powinno się tego robić, poprzez dodanie dodatkowego Activity, które będzie przez określony czas wyświetlało nasze logo. Nasz splash screen nie powinien się wyświetlać, kiedy aplikacja już jest w pamięci, nie powinien nie potrzebnie zwalniać startu aplikacji, nie powinien również się pojawić w przypadku obsługi deep linków.

android:windowBackground

Aby poprawnie zaimplementować splash screen potrzebujemy jedynie stworzony specjalnie motyw, powinien on wyglądać następująco:

Powinien on różnić się od motywu używanego w aplikacji jedynie wartością atrybutu windowBackground. Możemy jeszcze próbować zmieniać atrybut colorPrimaryDark odpowiedzialny za kolor status bar’a.

Niestety, pod wartością @drawable/launch_screen nie może kryć się zwykły obrazek, ze względu na to, że zostanie on rozciągnięty zawsze do wymiarów ekranu. Możemy natomiast zdefiniować nasz launch screen jako xml.

Ważnym elementem tego rozwiązania jest atrybut android:opacity=”opaque”, który zapobiegnie miganiu podczas zmiany motywu.

Kolejnym krokiem jest ustawienie motywu dla naszego startowego activity w AndroidManifest.xml

Pozostała jedynie podmiana motywu na właściwy, podczas startu aplikacji. Kiedy to zrobić?

Wywołujemy metodą setTheme(), koniecznie przed wywołaniem super.onCreate() i setContentView().

I to wszystko. Jest to najlepsza metoda na implementacją brandowanego startu aplikacji. Nie przedłużamy w ten sposób sztucznie czasu startu naszej aplikacji, nie tworzymy dodatkowego Activity, ani dodatkowych warstw widoków. Wyświetlamy natomiast splash screen, na taki okres czasu jaki dokładnie potrzebuje nasza aplikacja na start.

 

Bartek

About Bartek

Android developer, owner of smartsoft.io