Android’de Splash Screen’i Doğru Kullanmak

Android’de Splash Screen’i Doğru Kullanmak

Merhaba.

Bugün Android’de kullanılabilecek en doğru splash screen yöntemini göreceğiz.

Biliyorum ki çoğu kişi (bu gruba ben de dahildim) splash screen tasarlarken en kolay ve bilinen bir yol olarak projesine bir de splash screen activitysi ekler ve layout kısmını isteğine göre dizayn eder. Daha sonra da splash screen activitysi içerisinden bi thread başlatıp belirli bir süre sonra ana activitysini açar. Ancak bu yapı splash screen kullanımına en ters yapıdır. Çünkü splash screen kullanmanın amacı, main activity içerisinde birtakım işlemler yapılırken ön tarafta kullanıcıya logonuzu göstermek ve kullanıcıyı bu işlemler bitene kadar bekletmektir. Ancak bahsettiğimiz bu yapıda kullanıcı önce sizin logonuzu görecek, daha sonra ise Android işletim sistemi sizin activitynizin onCreate metodunu ararken -ki bu çok nadir de olsa 500 milisaniyeyi bulabiliyor- beyaz bir ekranla karşılaşacaktır ve bir de onu bekleyecektir. Halbuki doğru yol, sadece sadece acitivity bulma süresi kadar splash screenin görünmesi ve daha sonra main activity’e geçişin sağlanmasıdır. Zira eminim ki kimse bir uygulamayı açılış logosunu görmek için kullanmıyordur. Bu nedenle mümkün olan en kısa zamanda kullanıcıya uygulamaya erişim imkanı sağlamak en doğrusu olacaktır.

Bu teorik ve hiçbir işe yaramayan bilgilerden sonra dilerseniz kodlara geçelim.

<style name="AppTheme.Launcher">
    <item name="android:windowBackground">@drawable/launch_screen</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

Öncelikle projeniz içerisindeki styles.xml dosyasının içinde yukarıda göründüğü gibi base temanızdan extend edilmiş yeni bir tema oluşturmanız gerekiyor. Bu tema sayesinde herhangi bir layout ya da activitye ihtiyaç duymadan splash screen oluşturabileceğiz. Dilerseniz tema içerisindeki ayarları kendinize göre de özelleştirebilirsiniz.

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:opacity="opaque">
    <item android:drawable="@android:color/white" />
    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/splash_logo" />
    </item>
</layer-list>

Daha sonra splash screenin background rengini ve logonuzu eklemek için drawable klasörü içerisinde yukarıdaki gibi bir launch_screen.xml dosyası oluşturuyoruz. Arkaplan rengini android:drawable satırında, logoyu ise android:src satırında değiştirebilirsiniz. Buradaki önemli faktör logonuzun 144dp boyutunda oluşturulmuş olması. Bu değerden yukarı çıktıkça logonuz gereksiz yere büyür, aşağı indikçe ise görünemeyecek kadar küçülür. Logonuzu doğru şekilde boyutlandırmanız için buradaki online araçtan yardım alabilirsiniz, gerçekten çok kullanışlı bir web sitesi.

<activity
    android:name=".MainActivity"
    android:theme="@style/AppTheme.Launcher">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Evet, temamızı ve splash ekranımızı oluşturduk. Şimdi ise yukarıdaki kodda görüldüğü gibi AndroidManifest dosyası içerisinde splash screenden hemen sonra gidilecek activity içerisine

android:theme="@style/AppTheme.Launcher"

satırını eklememiz gerekiyor ki bu sayede splash screen temamız aktif hale gelsin.

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.AppTheme);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

Son olarak da splash screenden sonra gidilecek activity içerisine yukarıda da bulunan

setTheme(R.style.AppTheme);

kod satırını eklememiz gerekiyor. Bu kod satırını onCreate metodunun superinden önce çağırmamız gerektiğini de unutmayalım. Bu satır sayesinde Android işletim sisteminin activitynizle ilgili kendine ait işlemleri bittikten hemen sonra temanız eski haline bürünecek. Bu satırı eklemediğinizde ise main activity arkaplanınız splash screeninizle aynı halde kalacaktır.

Aslında anlatacaklarım bu kadar. Buraya kadar olan kodları projenize eklediğinizde splash screeniniz doğru şekilde çalışmaya başlayacaktır. Ancak “Bu kadar kısa süre bana yetmez, ben logom daha uzun süre görünsün istiyorum yeaa” diyorsanız hemen aşağıdan devam edebilirsiniz.

<application
    android:name=".MyApp"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
package tr.com.cagrialdemir.splashcreenexample;

import android.app.Application;
import android.os.SystemClock;

public class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        SystemClock.sleep(2500);
    }
}

Yukarıdaki kodlarda da göründüğü gibi projeniz içerisinde MyApp isminde bir class oluşturup bu classı Application classından extend ederseniz ve hemen üstünde göründüğü üzere AndroidManifest dosyanızda <application> tagı içerisine

android:name=".MyApp"

satırını eklerseniz artık elinizde bir base classınız bulunuyor demektir. Bu classın içinde override edilmiş olan onCreate metodu içerisinde de sleep metodunu çağırarak istediğiniz süre boyunca splash screeninizin görünmesini sağlayabilirsiniz. Ancak unutmayın, burada geçen süre boyunca uygulamanız bir arpa boyu kadar bile yol almayacaktır.

Anlatacaklarım bu sefer gerçekten bu kadar, bu başlık hakkında neredeyse hiç Türkçe kaynak bulunmadığını gördüğüm için bu yazıyı yazma ihtiyacı duydum. Umarım faydalı olabilmiştir, görüşmek üzere.