ساخت splash screen در اندروید

با نام خدا و سلام

خب خیلی از اپلیکیشن ها از Splash screen  استفاده می کنند، مخصوصا زمانی که اپلیکیشن میخواد برای بار اول لود بشه، اما متاسفانه در اندروید بر خلاف ios هیچ مکانیسم داخلی برای ساخت splash screen در نظر گرفته نشده است. در این آموزش میخوایم ببینیم چطور میشه در اندروید splash screen داشته باشیم.

 

Splash screen use case scenarios: 

هدف از ساحت splash screen وابسته به نیازمندی های اپلیکیشن می باشد. دیاگرام زیر توضیحی در مورد سناریو های مختلف use case از splash screen رو ارائه داده:

منبع : androidhive

در این آموزش به ساخت splash screen برای هر دو سناریوی بالا می پردازیم. یکی نمایش spalsh screen با استفاده از timer و دیگرینزمانی که داریم اتصال http میزنیم و زمان میگیرد تا اطلاعات مورد نیاز fetch شوند. جفت حالت شبیه هم هستند جز activity مورد نظر splash screen .

برای پیاده سازی یه اکتیویتی جدا برای spalsh در نظر میگیریم که هر وقت بسته شد main activity رو اجرا کنیم.

 

1- ساخت پروژه جدید.

2-ساخت activity جدید که نام اون رو SplashActivity انتخاب می کنیم. (با ساخت اکتیویتی ، یک کلاس جاوا با نام SplashActivity و یه فایل با نام activity_splash داخل  layout ساحته می شود)

3- حال باید AndroidManifest.xml رو ویرایش کنیم. پس از ویرایش فایل اندروید مانیفست به صورت زیر باید باشه:

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="info.androidhive.androidsplashscreentimer"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <!-- Splash screen -->
        <activity
            android:name="info.androidhive.androidsplashscreentimer.SplashScreen"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Black.NoTitleBar" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
         
        <!-- Main activity -->
        <activity
            android:name="info.androidhive.androidsplashscreentimer.MainActivity"
            android:label="@string/app_name" >
        </activity>
    </application>
 
</manifest>

4- همان طور که گفتم داخل layout باید یه فایل با نام activity_splash.xml ساخته شده باشه دیگه ویرایش این فایل با خودتونه 🙂

نمونه فایل layout برای SplashScreen : 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/gradient_background">

<ImageView
    android:id="@+id/imgLogo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"/>

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="10dp"
    android:textSize="12dp"
    android:textColor="#454545"
    android:gravity="center_horizontal"
    android:layout_alignParentBottom="true"
    android:text="www.arisa-co.com - www.sadegh-khan.ir" />

</RelativeLayout>

5- حال نوبت به فایل جاوا میشه، SplashScreen.java باید به صورت زیر باشه:

package arisa_co.com.imfree;

import android.content.Intent;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class SplashActivity extends AppCompatActivity {

    // Splash screen timer
    private static int SPLASH_TIME_OUT = 2000;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        new Handler().postDelayed(new Runnable() {

            /*
             * Showing splash screen with a timer. This will be useful when you
             * want to show case your app logo / company
             */
            @Override
            public void run() {
                // This method will be executed once the timer is over
                // Start your app main activity
                Intent i = new Intent(SplashActivity.this, MainActivity.class);
                startActivity(i);

                // close this activity
                finish();
            }
        }, SPLASH_TIME_OUT);
    }
}

با اجرای اپلیکیشن، splash screen رو به مدت دو ثانیه خواهید دید و بعدش main activity اجرا می شود.

 

برای حالت دوم که زمان fetch کردن http ها نیز splash screen باز شود در ادامه یه آموزش قرار می دهم.