Başlangıç ekranları

Android 12'den itibaren uygulamalar, açılışta uygulamaya giriş hareketi, uygulama simgenizi gösteren bir başlangıç ekranı ve uygulamanızın kendisine geçiş içeren bir sistem başlangıç ekranıyla açılır. Başlangıç ekranı Window olduğundan Activity kapsar.

Şekil 1. Başlangıç ekranı.

Başlangıç ekranı deneyimi, her uygulama başlatma işlemine standart tasarım öğeleri getirir ancak uygulamanızın benzersiz markasını koruyabilmesi için özelleştirilebilir.

Uygulamanızdaki başlangıç ekranını özelleştirmek için Jetpack SplashScreen uyumluluk kitaplığını kullanın. Platform SplashScreen API'sini sarmalar ve setContent kullanarak kullanıcı arayüzünü Compose ile ayarlayan etkinlikler de dahil olmak üzere tüm ComponentActivity ile çalışır.

Başlangıç ekranının işleyiş şekli

Kullanıcı, uygulamanın işlemi çalışmıyorken (baştan başlatma) veya Activity oluşturulmamışken (hazır durumda başlatma) uygulamayı başlattığında aşağıdaki etkinlikler gerçekleşir:

  1. Sistem, tanımladığınız temaları ve animasyonları kullanarak başlangıç ekranını gösterir.

  2. Uygulama hazır olduğunda başlangıç ekranı kapatılır ve uygulama görüntülenir.

Başlangıç ekranı, sıcak başlatma sırasında hiçbir zaman gösterilmez.

Başlangıç ekranının öğeleri ve mekanikleri

Başlangıç ekranının öğeleri, Android manifest dosyasındaki XML kaynak dosyaları tarafından tanımlanır. Her öğenin açık ve koyu tema sürümleri vardır.

Başlangıç ekranının özelleştirilebilir öğeleri uygulama simgesi, simge arka planı ve pencere arka planından oluşur:

Özelleştirilebilir öğeleri için numaralı açıklama metinleri içeren başlangıç ekranı
Şekil 2. Başlangıç ekranının özelleştirilebilir öğeleri.

Şekil 2'de gösterilen aşağıdaki öğeleri inceleyin:

1 Uygulama simgesi, drawable vektör olmalıdır. Statik veya hareketli olabilir. Animasyonların süresi sınırsız olabilir ancak 1.000 milisaniyeyi aşmamanızı öneririz. Başlatıcı simgesi varsayılan simgedir.

2 Simge arka planı isteğe bağlıdır ve simge ile pencere arka planı arasında daha fazla kontrasta ihtiyacınız varsa kullanışlıdır. Uyarlanabilir simge kullanıyorsanız pencere arka planıyla yeterli kontrast varsa simgenin arka planı gösterilir.

3 Uyarlanabilir simgelerde olduğu gibi ön planın üçte biri maskelenir.

4 Pencere arka planı tek bir opak renkten oluşur. Pencere arka planı ayarlanmışsa ve düz bir renkse özellik ayarlanmadığında varsayılan olarak kullanılır.

Başlangıç ekranı boyutları

Başlangıç ekranı simgesi, uyarlanabilir simgelerle aynı özellikleri kullanır:

  • Markalı resim: 200×80 dp olmalıdır.
  • Simge arka planı olan uygulama simgesi: Bu simge 240×240 dp boyutunda olmalı ve 160 dp çapında bir daireye sığmalıdır.
  • Simge arka planı olmayan uygulama simgesi: Bu simge 288×288 dp boyutunda olmalı ve 192 dp çapında bir daireye sığmalıdır.

Örneğin, bir resmin tam boyutu 300×300 dp ise simgenin 200 dp çapında bir daireye sığması gerekir. Dairenin dışındaki her şey görünmez (maskelenmiş) hale gelir.

Düz ve şeffaf simge arka planlarına sahip başlangıç ekranı simgesi boyutları
Şekil 3. Düz ve şeffaf arka planlar için başlangıç ekranı simge boyutları.

Başlangıç ekranı animasyonları ve başlatma sırası

Ek gecikme genellikle bir uygulamanın baştan başlatılmasıyla ilişkilendirilir. Başlangıç ekranınıza animasyonlu bir simge eklemek, estetik açıdan hoş bir görünüm ve daha kaliteli bir deneyim sunar. Kullanıcı araştırmaları, animasyon izlerken algılanan başlatma süresinin daha kısa olduğunu gösteriyor.

Başlangıç ekranı animasyonu, Şekil 4'te gösterildiği gibi başlatma sırası bileşenlerine yerleştirilmiştir.

Başlatıcı simgesine dokunulmasıyla başlayan ve büyüyerek ekranı dolduran, on iki ardışık kareden oluşan başlatma sırası
Şekil 4. Başlatma sırası.
  1. Giriş animasyonu: Bu, sistem görünümünden başlangıç ekranına geçişi içerir. Sistem tarafından kontrol edilir ve özelleştirilemez.

  2. Başlangıç ekranı (sıranın "bekleme" bölümünde gösterilir): Başlangıç ekranı özelleştirilebilir. Böylece kendi logo animasyonunuzu ve markanızı ekleyebilirsiniz. Düzgün çalışması için bu sayfada açıklanan şartları karşılaması gerekir.

  3. Çıkış animasyonu: Başlangıç ekranını gizleyen animasyondan oluşur. Özelleştirmek istiyorsanız SplashScreenViewProvider görünümünü ve simgesini kullanın. Dönüştürme, opaklık ve renk ayarlarıyla bu öğeler üzerinde istediğiniz animasyonu çalıştırabilirsiniz. Bu durumda, animasyon tamamlandığında başlangıç ekranını manuel olarak kaldırın.

Simge animasyonu çalıştırılırken uygulama daha erken hazır olursa uygulama başlatma, sırayı atlama seçeneği sunar. Uygulama onResume() tetikler veya başlangıç ekranı otomatik olarak zaman aşımına uğrar. Bu nedenle, hareketin rahatça atlanabildiğinden emin olun. Başlangıç ekranı yalnızca uygulama görsel açıdan kararlı olduğunda onResume() ile kapatılmalıdır. Böylece ek dönen simgelere gerek kalmaz. Tamamlanmamış bir arayüz sunmak kullanıcılar için rahatsız edici olabilir ve öngörülemezlik veya özensizlik izlenimi verebilir.

Başlangıç ekranı animasyonuyla ilgili koşullar

Başlangıç ekranınız aşağıdaki özelliklere uygun olmalıdır:

  • Şeffaflık olmadan tek bir pencere arka plan rengi ayarlayın. Gündüz ve gece modu, SplashScreen uyumluluk kitaplığı ile desteklenir.

  • Animasyonlu simgenin aşağıdaki özellikleri karşıladığından emin olun:

    • Biçim: Simge, AnimatedVectorDrawable (AVD) XML olmalıdır.
    • Boyutlar: AVD simgesi, uyarlanabilir simgenin dört katı büyüklükte olmalıdır:
      • Simge alanı 432 dp olmalıdır. Diğer bir deyişle, maskelenmemiş uyarlanabilir simgenin 108 dp'lik alanının dört katı olmalıdır.
      • Resmin içteki üçte ikilik kısmı başlatıcı simgesinde görünür ve 288 dp olmalıdır. Diğer bir deyişle, uyarlanabilir simgenin içteki maskelenmiş alanını oluşturan 72 dp'nin dört katı olmalıdır.
    • Süre: Telefonlarda 1.000 ms'yi aşmamanızı öneririz. Gecikmeli başlatma kullanabilirsiniz ancak bu süre 166 ms'den uzun olamaz. Uygulama başlatma süresi 1.000 ms'den uzunsa döngü animasyonu kullanabilirsiniz.
  • Başlangıç ekranını kapatmak için uygun bir zaman belirleyin. Bu işlem, uygulamanız ilk kareyi çizdiğinde gerçekleşir. Başlangıç ekranını daha uzun süre ekranda tutma ile ilgili bölümde açıklandığı şekilde bu ekranı daha da özelleştirebilirsiniz.

Başlangıç ekranı kaynakları

Şekil 5. Örnek AVD.

Animasyon oluşturma, biçimlendirme ve AVD'ye aktarma işlemlerinin nasıl yapıldığını gösteren örnek başlangıç kitini indirin. Bu, aşağıdakileri içerir:

  • Animasyonun Adobe After Effects proje dosyası.
  • Dışa aktarılan son AVD XML dosyası.
  • Animasyonun örnek GIF'i.

Bu dosyaları indirerek Google Hizmet Şartları'nı kabul etmiş olursunuz.

Google Gizlilik Politikası, bu hizmette verilerin nasıl işlendiğini açıklar.

Uygulamanızdaki başlangıç ekranını özelleştirme

windowBackground tek bir renkse SplashScreen, varsayılan olarak temanızın windowBackground rengini kullanır. Başlangıç ekranını özelleştirmek için uygulama temasına özellikler ekleyin.

Aşağıdakilerden birini yaparak uygulamanızın başlangıç ekranını özelleştirebilirsiniz:

  • Görünümünü değiştirmek için tema özelliklerini ayarlayın.

  • Ekranda daha uzun süre tutun.

  • Başlangıç ekranını kapatma animasyonunu özelleştirin.

Başlayın

Temel SplashScreen kitaplığı, Android 12 başlangıç ekranını API 23'ten itibaren tüm cihazlara getirir. Bu kitaplığı projenize eklemek için build.gradle dosyanıza aşağıdaki snippet'i ekleyin:

Modern

dependencies {
    implementation "androidx.core:core-splashscreen:1.2.0"
}

Kotlin

dependencies {
    implementation("androidx.core:core-splashscreen:1.2.0")
}

Ardından, Theme.SplashScreen öğesinden devralınan bir başlangıç ekranı teması oluşturun, postSplashScreenTheme öğesini etkinliğin daha sonra kullandığı temaya ayarlayın, manifest dosyanızda başlangıç ekranı temasını uygulayın (Mevcut başlangıç ekranı uygulamanızı Android 12'ye taşıma bölümüne bakın) ve aşağıdaki bölümlerdeki örneklerde gösterildiği gibi super.onCreate() öğesini çağırmadan önce başlangıç etkinliğinizde installSplashScreen() öğesini çağırın.

Başlangıç ekranının görünümünü değiştirmek için bir tema ayarlayın.

Uygulamanızın başlangıç ekranını özelleştirmek için Activity temanızda aşağıdaki özellikleri belirtebilirsiniz. android:windowBackground gibi özellikleri kullanan eski bir başlangıç ekranı uygulamanız varsa Android 12 ve sonraki sürümler için alternatif bir kaynak dosyası sağlamayı düşünebilirsiniz.

  1. Arka planı belirli bir renkle doldurmak için windowSplashScreenBackground simgesini kullanın:

    <item name="android:windowSplashScreenBackground">@color/...</item>
    
  2. Başlangıç penceresinin ortasındaki simgeyi değiştirmek için windowSplashScreenAnimatedIcon simgesini kullanın.

    Yalnızca Android 12'yi (API düzeyi 32) hedefleyen uygulamalar için aşağıdakileri yapın:

    Nesne, AnimationDrawable ve AnimatedVectorDrawable aracılığıyla canlandırılabilir ve çizilebilir ise başlangıç penceresini gösterirken animasyonu oynatmak için windowSplashScreenAnimationDuration değerini ayarlayın. Süre doğrudan AnimatedVectorDrawable üzerinden belirlendiği için Android 13'te bu işlem gerekli değildir.

    <item name="android:windowSplashScreenAnimatedIcon">@drawable/...</item>
    
  3. Başlangıç ekranı simge animasyonunun süresini belirtmek için windowSplashScreenAnimationDuration kullanın. Bu ayar, başlangıç ekranının gösterildiği gerçek süreyi etkilemez ancak SplashScreenViewProvider.iconAnimationDurationMillis kullanarak başlangıç ekranı çıkış animasyonunu özelleştirirken bu süreyi alabilirsiniz. Daha fazla bilgi için başlangıç ekranını daha uzun süre ekranda tutma ile ilgili aşağıdaki bölüme bakın.

    <item name="android:windowSplashScreenAnimationDuration">1000</item>
    
  4. Başlangıç ekranı simgesinin arkasına arka plan ayarlamak için windowSplashScreenIconBackgroundColor kullanın. Bu, pencere arka planı ile simge arasında yeterli kontrast olmadığında kullanışlıdır.

    <item name="android:windowSplashScreenIconBackgroundColor">@color/...</item>
    
  5. Başlangıç ekranının alt kısmında gösterilecek bir resim ayarlamak için windowSplashScreenBrandingImage öğesini kullanabilirsiniz. Ancak tasarım yönergeleri, markalama resmi kullanılmamasını önerir.

    <item name="android:windowSplashScreenBrandingImage">@drawable/...</item>
    
  6. Uygulamanızın Android 13 ve sonraki sürümlerde başlangıç ekranında her zaman simgeyi gösterip göstermeyeceğini belirtmek için windowSplashScreenBehavior kullanabilirsiniz. Varsayılan değer 0'dır. Bu değer, başlatma etkinliği splashScreenStyle değerini SPLASH_SCREEN_STYLE_ICON olarak ayarlarsa simgeyi başlangıç ekranında gösterir veya başlatma etkinliği bir stil belirtmezse sistem davranışını izler. Hiçbir zaman boş bir başlangıç ekranı gösterilmemesini ve her zaman animasyonlu simgenin gösterilmesini tercih ediyorsanız bu değeri icon_preferred olarak ayarlayın.

    <item name="android:windowSplashScreenBehavior">icon_preferred</item>
    

Başlangıç ekranını daha uzun süre ekranda tutma

Uygulamanız ilk karesini çizdiğinde başlangıç ekranı kapatılır. Yerel diskten uygulama içi ayarları eşzamansız olarak yüklemek gibi az miktarda veri yüklemeniz gerekiyorsa veriler hazır olana kadar başlangıç ekranını ekranda tutmak için setKeepOnScreenCondition kullanın. Koşul, her kare çizilmeden önce değerlendirilir. Bu nedenle, kullanıcı arayüzünün engellenmesini önlemek için koşulu hızlı tutun.

Başlangıç etkinliğiniz çizimden önce tamamlanırsa (örneğin, içerik görünümünü ayarlamayarak ve onResume öncesinde tamamlayarak) koşul ayarlamanız gerekmez.

override fun onCreate(savedInstanceState: Bundle?) {
    // Install the splash screen before calling super.onCreate().
    val splashScreen = installSplashScreen()
    super.onCreate(savedInstanceState)

    // Keep the splash screen on-screen until the initial data is ready.
    // The condition is checked each time the app is about to draw a frame.
    splashScreen.setKeepOnScreenCondition { !viewModel.isReady.value }

    setContent {
        MyApp()
    }
}

Başlangıç ekranını kapatma animasyonunu özelleştirme

Başlangıç ekranının animasyonunu setOnExitAnimationListener ile daha fazla özelleştirebilirsiniz. Dinleyici, animasyonlu başlangıç ekranı görünümünü sağlayan bir SplashScreenViewProvider alır. Animasyonunuz sona erdiğinde remove() işlevini çağırın.

override fun onCreate(savedInstanceState: Bundle?) {
    val splashScreen = installSplashScreen()
    super.onCreate(savedInstanceState)

    // Add a callback that's called when the splash screen is animating to the
    // app content.
    splashScreen.setOnExitAnimationListener { splashScreenViewProvider ->
        val splashScreenView = splashScreenViewProvider.view
        // Create your custom animation.
        val slideUp = ObjectAnimator.ofFloat(
            splashScreenView,
            View.TRANSLATION_Y,
            0f,
            -splashScreenView.height.toFloat()
        )
        slideUp.interpolator = AnticipateInterpolator()
        slideUp.duration = 200L

        // Call SplashScreenViewProvider.remove at the end of your custom
        // animation.
        slideUp.doOnEnd { splashScreenViewProvider.remove() }

        // Run your animation.
        slideUp.start()
    }

    setContent {
        MyApp()
    }
}

Bu geri çağırma başladığında, başlangıç ekranındaki animasyonlu drawable vektör başlar. Uygulama başlatma süresine bağlı olarak çizilebilir öğe, animasyonunun ortasında olabilir. Animasyonun ne zaman başladığını öğrenmek için SplashScreenViewProvider.iconAnimationStartMillis kullanın. Simge animasyonunun kalan süresini şu şekilde hesaplayabilirsiniz:

// Get the duration of the animated vector drawable.
val animationDuration = splashScreenViewProvider.iconAnimationDurationMillis
// Get the start time of the animation, in milliseconds since the epoch.
val animationStart = splashScreenViewProvider.iconAnimationStartMillis
// Calculate the remaining duration of the animation.
val remainingDuration =
    (animationDuration - (System.currentTimeMillis() - animationStart))
        .coerceAtLeast(0L)

Ek kaynaklar