Począwszy od Androida 12
Interfejs API SplashScreen
umożliwia uruchamianie aplikacji
z animacją, w tym ruchem w aplikacji po uruchomieniu, ekranem powitalnym
ikonę aplikacji i przejście do samej aplikacji. SplashScreen
to
Window
i
obejmuje więc
Activity
Ekran powitalny wprowadza standardowe elementy graficzne do każdej aplikacji ale można ją dostosować, aby zachować unikalną cechę marki.
Oprócz korzystania z interfejsu API platformy SplashScreen
możesz też używać
SplashScreen
biblioteka kompatybilna, która obejmuje interfejs API SplashScreen
.
Jak działa ekran powitalny
Gdy użytkownik uruchomi aplikację, gdy jej proces nie jest uruchomiony (uruchomienie „na zimno”) lub gdy Activity
nie jest utworzony (uruchomienie „na ciepło”), występują te zdarzenia:
System wyświetla ekran powitalny z użyciem zdefiniowanych przez Ciebie motywów i animacji.
Gdy aplikacja będzie gotowa, ekran powitalny zniknie i uruchomi się aplikacja.
Podczas szybkiego uruchamiania ekran powitalny nigdy się nie wyświetla.
Elementy i mechanika ekranu powitalnego
Elementy ekranu powitalnego są definiowane przez pliki zasobów XML w pliku manifestu Androida. Każdy element ma swoje zastosowanie w trybie jasnym i ciemnym.
Dostosowywane elementy ekranu powitalnego to ikona aplikacji, ikona Tło i Tło okna:

Weź pod uwagę te elementy pokazane na rys. 2:
1 Ikona aplikacji musi być obiektem rysowalnym wektorowo. it mogą być statyczne lub animowane. Animacje mogą mieć nieograniczony czas trwania, zalecamy nie przekraczać 1000 milisekund. Domyślna ikona programu uruchamiającego.
2 Tło ikony jest opcjonalne i przydatne, jeśli Potrzeba większego kontrastu między ikoną a tłem okna. Jeśli używasz ikony dostosowującej się do motywu, jej tło jest wyświetlane, jeśli jest wystarczająco kontrastowe z tłem okna.
3 Podobnie jak w przypadku ikon adaptacyjnych, jedna trzecia pierwszego planu jest zamaskowana.
4 Tło okna składa się z jednego nieprzezroczystego koloru. Jeśli ustawiony jest kolor tła okna, jest on używany domyślnie, jeśli atrybut nie jest ustawiony.
Wymiary ekranu powitalnego
Ikona ekranu powitalnego ma te same specyfikacje co ikon adaptacyjnych, w następujący sposób:
- Obraz marki: musi mieć wymiary 200 × 80 dp.
- Ikona aplikacji z tłem: musi mieć wymiary 240 × 240 dp i mieścić się w okręgu o średnicy 160 dp.
- Ikona aplikacji bez tła ikony: musi mieć wymiary 288 × 288 dp i mieścić się koło o średnicy 192 dp.
Jeśli na przykład pełny rozmiar obrazu to 300 x 300 dp, ikona musi mieścić się w kolo 200 dp. Wszystko poza okręgiem staje się niewidoczne (zamaskowane).

Animacje na ekranie powitalnym i sekwencja uruchamiania
Dodatkowe opóźnienia są często związane z uruchamianiem aplikacji przy uruchomieniu „na zimno”. Dodanie animowanej ikony na ekranie powitalnym ma oczywiste walory estetyczne i zapewnia lepsze wrażenia. Badania opinii użytkowników pokazują, że postrzegany start-up czas oglądania animacji jest krótszy.
Animacja ekranu powitalnego jest umieszczona w komponentach sekwencji uruchamiania, jak pokazano na rysunku 4.

Animacja otwierania: składa się z widoku systemu i ekranu powitalnego. Jest on kontrolowany przez system i nie można go dostosowywać.
Ekran powitalny (wyświetlany w trakcie części sekwencji „oczekiwanie”): ekran powitalny ekran można dostosować, dodając własną animację logo marki. Musi spełniać wymagania opisane na tej stronie.
Animacja wyjścia: składa się z animacji, która powoduje ukrycie ekranu powitalnego. Jeśli chcesz je dostosować, użyj ikony
SplashScreenView
. Możesz uruchomić na nich dowolną animację z ustawieniami przekształcenia, krycia i koloru. W takim przypadku ręcznie usuń ekran powitalny, gdy animacja jest gotowa.
Podczas uruchamiania aplikacji, gdy animacja ikony jest odtwarzana, możesz pominąć sekwencję, jeśli aplikacja jest już gotowa. Aplikacja uruchamia onResume()
lub ekran powitalny automatycznie się wyłącza, więc upewnij się, że animacja może być wygodnie pominięta. Ekran powitalny można zamknąć tylko przy użyciu przycisku onResume()
, gdy aplikacja jest stabilna pod względem wizualnym, więc nie trzeba używać dodatkowych spinnerów. Niekompletny interfejs może być niekorzystny dla użytkowników i
stwarzają wrażenie nieprzewidywalności lub braku dopracowania.
Wymagania dotyczące animacji ekranu powitalnego
Ekran powitalny musi spełniać następujące wymagania:
Ustaw kolor tła jednego okna bez przezroczystości. Dzień i noc są obsługiwane przez Biblioteka kompatybilna
SplashScreen
.Upewnij się, że animowana ikona spełnia te wymagania:
- Format: ikona musi mieć AnimatedVectorDrawable (AVD) Plik XML:
- Wymiary: ikona AVD musi mieć 4 razy większy rozmiar niż ikona adaptacyjna, zgodnie z tym wzorem:
- Powierzchnia ikony musi wynosić 432 dp, czyli 4 razy większą powierzchnię 108 dp niemaskowanej ikony adaptacyjnej.
- Na ikonie programu uruchamiającego widoczne są 2/3 wewnętrznej części obrazu. i musi wynosić 288 dp, czyli 4 razy więcej niż 72 dp, tworzy wewnętrzny obszar maskowany ikony adaptacyjnej.
- Czas trwania: w przypadku telefonów zalecamy nie więcej niż 1000 ms. Za pomocą jest opóźnione, ale nie może trwać dłużej niż 166 ms. Jeśli aplikacja czas uruchamiania jest dłuższy niż 1000 ms, pomyśl o animacji zapętlającej.
Ustaw odpowiednią godzinę zamknięcia ekranu powitalnego, aplikacja pobiera pierwszą klatkę, Możesz je dostosować zgodnie z opisem w sekcji Pozostawianie ekranu powitalnego na dłużej.
Zasoby ekranu powitalnego
Pobierz przykładowy zestaw startowy, , który pokazuje, jak utworzyć, sformatować i wyeksportować animację do AVD. Oto niektóre z nich:
- Plik projektu animacji Adobe After Effects.
- Końcowy wyeksportowany plik XML AVD.
- Przykładowy GIF z animacją.
Pobierając te pliki, akceptujesz te dokumenty: Warunki korzystania z usług Google
Polityka prywatności Google opisuje, jak postępujemy z danymi w tej usłudze.
Dostosowywanie ekranu powitalnego w aplikacji
Domyślnie SplashScreen
używa elementu windowBackground
Twojego motywu, jeśli
windowBackground
jest jednokolorowy. Aby dostosować ekran powitalny, dodaj
do motywu aplikacji.
Ekran powitalny aplikacji możesz dostosować na jeden z tych sposobów:
Ustaw atrybuty motywu, aby zmienić jego wygląd.
Zadbaj o to, aby wyświetlały się na ekranie przez dłuższy czas
Dostosuj animację zamykania ekranu powitalnego.
Rozpocznij
Podstawowa biblioteka SplashScreen
udostępnia ekran powitalny Androida 12
urządzeń z interfejsu API 23. Aby dodać go do projektu, dodaj do pliku build.gradle
ten fragment kodu:
Groovy
dependencies { implementation "androidx.core:core-splashscreen:1.0.0" }
Kotlin
dependencies { implementation("androidx.core:core-splashscreen:1.0.0") }
Ustaw motyw ekranu powitalnego, aby zmienić jego wygląd
Aby dostosować ekran powitalny aplikacji, możesz podać te atrybuty w temacie Activity
. Jeśli masz już zastrzeżoną implementację ekranu powitalnego, która używa atrybutów takich jak android:windowBackground
, rozważ udostępnienie alternatywnego pliku zasobu na potrzeby Androida 12 i nowszych.
Użyj
windowSplashScreenBackground
, aby wypełnić tło określonym kolorem:<item name="android:windowSplashScreenBackground">@color/...</item>
Użyj
windowSplashScreenAnimatedIcon
aby zastąpić ikonę na środku okna początkowego.W przypadku aplikacji kierowanych na Androida 12 (poziom API 32) wykonaj te czynności:
Jeśli obiekt jest animowany i można go rysować
AnimationDrawable
iAnimatedVectorDrawable
, ustawwindowSplashScreenAnimationDuration
na odtwarzanie animacji w trakcie wyświetlania okna początkowego. Nie jest to wymagane na Androida 13, ponieważ czas trwania jest bezpośrednioAnimatedVectorDrawable
<item name="android:windowSplashScreenAnimatedIcon">@drawable/...</item>
Użyj
windowSplashScreenAnimationDuration
aby wskazać czas trwania animacji ikony na ekranie powitalnym. Ustawienie Nie ma wpływu na czas wyświetlania ekranu powitalnego ale możesz go pobrać podczas dostosowywania wyjścia ekranu powitalnego za pomocąSplashScreenView.getIconAnimationDuration
Więcej informacji znajdziesz w sekcji Pozostawianie ekranu wczytywania na ekranie przez dłuższy czas.<item name="android:windowSplashScreenAnimationDuration">1000</item>
Użyj
windowSplashScreenIconBackgroundColor
, aby ustawić tło za ikoną ekranu powitalnego. Jest to przydatne, jeśli między tłem okna a ikoną nie ma wystarczającego kontrastu.<item name="android:windowSplashScreenIconBackgroundColor">@color/...</item>
Za pomocą
windowSplashScreenBrandingImage
aby ustawić obraz wyświetlany u dołu ekranu powitalnego. Wytyczne dotyczące projektowania zalecają jednak, aby nie używać obrazów z elementami marki.<item name="android:windowSplashScreenBrandingImage">@drawable/...</item>
Możesz użyć parametru
windowSplashScreenBehavior
, aby określić, czy aplikacja ma zawsze wyświetlać ikonę na ekranie powitalnym w Androidzie 13 lub nowszym. Wartość domyślna to 0, co powoduje wyświetlenie ikony na ekranie powitalnym, jeśli aktywność uruchamiająca ustawia parametrsplashScreenStyle
naSPLASH_SCREEN_STYLE_ICON
, lub zachowuje zachowanie systemu, jeśli aktywność uruchamiająca nie określa stylu. Jeśli nie chcesz nigdy wyświetlać pustego ekranu powitalnego i chcesz, aby zawsze wyświetlała się animowana ikona, ustaw tę wartość naicon_preferred
.<item name="android:windowSplashScreenBehavior">icon_preferred</item>
dłuższe wyświetlanie ekranu powitalnego,
Ekran powitalny znika, gdy tylko aplikacja wyświetli pierwszą klatkę. Jeśli
muszą wczytać niewielką ilość danych, np. ustawienia w aplikacji
asynchronicznie dysku lokalnego,
ViewTreeObserver.OnPreDrawListener
zawiesić aplikację i wygenerować pierwszą klatkę.
Jeśli aktywność początkowa kończy się przed narysowaniem – na przykład przez nieustawienie widoku treści i zakończenie przed onResume
– nie jest potrzebny listener przed narysowaniem.
Kotlin
// Create a new event for the activity. override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Set the layout for the content view. setContentView(R.layout.main_activity) // Set up an OnPreDrawListener to the root view. val content: View = findViewById(android.R.id.content) content.viewTreeObserver.addOnPreDrawListener( object : ViewTreeObserver.OnPreDrawListener { override fun onPreDraw(): Boolean { // Check whether the initial data is ready. return if (viewModel.isReady) { // The content is ready. Start drawing. content.viewTreeObserver.removeOnPreDrawListener(this) true } else { // The content isn't ready. Suspend. false } } } ) }
Java
// Create a new event for the activity. @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set the layout for the content view. setContentView(R.layout.main_activity); // Set up an OnPreDrawListener to the root view. final View content = findViewById(android.R.id.content); content.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { // Check whether the initial data is ready. if (mViewModel.isReady()) { // The content is ready. Start drawing. content.getViewTreeObserver().removeOnPreDrawListener(this); return true; } else { // The content isn't ready. Suspend. return false; } } }); }
Dostosuj animację zamykania ekranu powitalnego
Animację ekranu powitalnego możesz dodatkowo dostosować za pomocą Activity.getSplashScreen()
.
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // ... // Add a callback that's called when the splash screen is animating to the // app content. splashScreen.setOnExitAnimationListener { splashScreenView -> // Create your custom animation. val slideUp = ObjectAnimator.ofFloat( splashScreenView, View.TRANSLATION_Y, 0f, -splashScreenView.height.toFloat() ) slideUp.interpolator = AnticipateInterpolator() slideUp.duration = 200L // Call SplashScreenView.remove at the end of your custom animation. slideUp.doOnEnd { splashScreenView.remove() } // Run your animation. slideUp.start() } }
Java
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ... // Add a callback that's called when the splash screen is animating to the // app content. getSplashScreen().setOnExitAnimationListener(splashScreenView -> { final ObjectAnimator slideUp = ObjectAnimator.ofFloat( splashScreenView, View.TRANSLATION_Y, 0f, -splashScreenView.getHeight() ); slideUp.setInterpolator(new AnticipateInterpolator()); slideUp.setDuration(200L); // Call SplashScreenView.remove at the end of your custom animation. slideUp.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { splashScreenView.remove(); } }); // Run your animation. slideUp.start(); }); }
Na początku tego wywołania zwrotnego
animowany obiekt rysowalny wektorowy
na ekranie powitalnym. W zależności od czasu trwania tego procesu
obiekt do rysowania może być w trakcie animacji. Użyj parametru SplashScreenView.getIconAnimationStart
, aby dowiedzieć się, kiedy rozpoczęła się animacja. Pozostały czas trwania animacji ikony możesz obliczyć w ten sposób:
Kotlin
// Get the duration of the animated vector drawable. val animationDuration = splashScreenView.iconAnimationDuration // Get the start time of the animation. val animationStart = splashScreenView.iconAnimationStart // Calculate the remaining duration of the animation. val remainingDuration = if (animationDuration != null && animationStart != null) { (animationDuration - Duration.between(animationStart, Instant.now())) .toMillis() .coerceAtLeast(0L) } else { 0L }
Java
// Get the duration of the animated vector drawable. Duration animationDuration = splashScreenView.getIconAnimationDuration(); // Get the start time of the animation. Instant animationStart = splashScreenView.getIconAnimationStart(); // Calculate the remaining duration of the animation. long remainingDuration; if (animationDuration != null && animationStart != null) { remainingDuration = animationDuration.minus( Duration.between(animationStart, Instant.now()) ).toMillis(); remainingDuration = Math.max(remainingDuration, 0L); } else { remainingDuration = 0L; }
Dodatkowe materiały
- Przeprowadź migrację obecnego ekranu powitalnego do Androida 12. wyższe
- Teraz w aplikacji na Androida która przedstawia rzeczywistą implementację ekranu powitalnego