SplashScreen — это заставка, которая появляется при запуске приложения. Многие ее используют для показа логотипа или предзагрузки данных и различных проверок. Это полезно, если у вас тяжелое приложение и при первом запуске пользователь будет видеть белый экран.
Давайте разберем три способа создания таких экранов:
- Переход между двумя Activity с заданным промежутком времени
- Использование одного Activity с заменой темы приложения при показе пользователю
- Переход между двумя Activity, первое из них без макета
У нас будет вымышленное приложение “Доставка пиццы”, ссылка на исходный код можно будет в конце статьи.
Переход между двумя Activity с заданным промежутком времени
Создаем проект, выбираем пустое Activity, сразу же создадим еще 1 пустое Activity с названием SplashActivityOne
.
Открываем layout, делаем серый фон и картинку по центру, к ней добавляем текст.
В Preview можно увидеть визуализированный макет.
Открываем исходный код SplashActivityOne
и добавим переход на основную Activity через 2 секунды.
Итак, что же мы сделали?
- Создаем нашу заставку на полный экран, в него включены 4 и 5 действие. Четвертым действием мы указываем размеры экрана в как полный экран, а пятым — скрываем
ActionBar
- Подгружаем наш созданный макет в Actiivty
- Планируем действие, а именно переход на
MainActivity
спустя 2 секунды.overridePendingTransition
отвечает за анимацию переходов между Activity - Делаем Activity на полный экран
- Скрываем ActionBar
В AndroidManifest
необходимо указать, что наш Splash является загрузочным Activity.
Запускаем приложение и наслаждаемся результатом.
Спустя 2 секунды мы попадаем в наше основное Activity.
Использование одного Activity с заменой темы приложения при показе пользователю
В уже созданном приложении создадим новое пустое Activity SplashActivityTwo
.
Перейдем в файл стилей (res/values/styles.xml
) и создадим новую тему для будущего Splash screen.
За родительскую тему для нашей заставки используем тему без ActionBar и указываем параметр, чтобы тема была во весь экран.
В AndroidManifest
.xml указываем тему для нашей Acitivty и основную тему для всего приложения.
Добавляем смену темы в нашей Activity.
По шагам:
- (Debug) Задержка, чтобы успеть сделать скриншот
- Меняем стиль заставки на обычную тему
После запуска мы получаем следующее:
После полезной нагрузки (в нашем случае засыпание потока на 5 секунд) меняется тема Activity и получаем домашний экран нашего приложения.
Переход между двумя Activity, первое из них без макета
Этот вариант похож на второй вариант, но вместо замены темы Activity здесь используется экрана. В SplashActivity
идет переход на MainActivity
без всяких задержек, но с показом логотипа.
Необходимо добавить тему для показа логотипа и текста в файле res/values/styles.xml
, возьмем ее из нашего второго варианта.
Создадим новую пустую Activity SplashActivityThree
без макета страницы, в манифесте сделаем ее стартовой и пропишем тему с фоновым изображением.
В SplashActivityThree
прописываем обычный переход на основную Activity в методе onCreate
.
В таком варианте у нас показывается заставка буквально доли секунды и запускается основная Activity.
Исходный код доступен по ссылке.
Самым правильным является второй способ создания SplashScreen, так как нет излишних активити с их переходами и когда приложение будет готово для отображения, просто меняется тема.
Сергей Шевелев
Статья написана в рамках конкурса статей проекта droDev.
Автор статьи: Сергей Шевелев
4 комментария
Чтобы поставить свое лого logo.png например, нужно загрузить 512 px png, прописать в splashbackground
я понимаю на всех устройствах будет отображаться правильно лого?
Надо попробовать можно ли туда загрузить SVG, если нет, то логичнее, наверное, разложить несколько лого по папкам в зависимости от DPI.
Но в целом ваше решение должно сработать.
Дурацкий пост… В начале говорится о том, что Splash Screen’ы нужны чтобы в начале не показывался белый экран, в итоге мы получаем не только белый экран, а ещё и задержку в 2 секунды. Гениально………….
Если использовать подход «Использование одного Activity с заменой темы приложения при показе пользователю», то при windowBackground не будет изначально белого экрана. Начиная с android 12 появились новые опции работы со сплешом, вероятно надо обновить статью.