Nuke Olaf - Log Store

[Android] 안드로이드 - splash screen (splash activity) 본문

Android

[Android] 안드로이드 - splash screen (splash activity)

NukeOlaf 2020. 1. 4. 19:22

1. splash 의 사전적 의미

splash

철벅 떨어지다, 끼얹다

https://dictionary.cambridge.org/ko/%EC%82%AC%EC%A0%84/%EC%98%81%EC%96%B4/splash

뭔가 첨벙하고 생겨났다! 그런 의미인것 같다

 

2. IT 사전에서 말하는 splash screen

https://dev.to/alonsoatoneyra/android-simple-way-to-implement-a-splashscreen-in-your-app-3k0f

splash screen 이란 앱을 열때 나타나는 화면이다. splash screen 은 사용자에게 앱의 첫인상으로 보여진다. 일반적으로 앱의 로고 또는 앱과 관련된 이미지를 표시하는데 사용된다. 

https://en.wikipedia.org/wiki/Splash_screen

 

3. splash screen 이란 무엇이고, spalsh screen 을 왜 사용할까?

splash screen 은 일반적으로 앱을 열 때 나타나는 첫 시작화면이다. 회사 로고, 이름, 광고, 콘텐츠 등을 고정된 시간동안 잠시 표시하고 사라지는 화면이라고 생각할 수 있다.

splash screen 은 앱이 android 기기에서 처음 시작될 때 표시되거나, 앱이 완전히 로드되는데 시간이 걸리는 경우에 앱이 로드되는 동안 사용자에게 화면을 표시하는 방법이 될 수 있다.

그러나, 최근에는 사용자의 기기 성능이 좋아지면서, 이미 앱이 전부 로드된 상태에서 필요없는 splash activity 를 보여주는 것이 불필요한 UX 가 될 수 있다고 생각하는 경우도 있으므로 splash activity 를 사용하기 전에 이 점에대해 생각해보아야 한다.

https://abhiandroid.com/programming/splashscreen

 

4. splash screen 을 어떻게 사용하는가?

Handler 를 이용해서 보여주는 방법과, 시작 theme 에 style 을 지정해서 보여주는 두 가지 방식을 많이 사용한다.

Handler 를 이용하는 방법은 많은 개발자들이 추천하지 않는 방식이다. 지정된 시간동안 무조건 화면을 보여주기 때문에 사용자의 시간을 불필요하게 소비한다고 생각하기 때문이다.

그대신 activity 의 theme background 를 splash 화면으로 보여주는 방식이 권장된다.

 

(1) Handler 를 이용하는 방법

splash activity 의 layout.xml 을 만든다

<?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical" android:layout_width="fill_parent"
          android:layout_height="fill_parent">

          <ImageView android:id="@+id/splashscreen" android:layout_width="wrap_content"
                  android:layout_height="fill_parent"
                  android:src="@drawable/splash"
                  android:layout_gravity="center"/>

          <TextView android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:text="Hello World, splash"/>

  </LinearLayout>

 

splash activity 를 handler 로 잠시 보여주고, 지정된 시간이 끝나면 intent 로 메인 화면으로 넘겨준다

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;

public class Splash extends Activity {

    /** Duration of wait **/
    private final int SPLASH_DISPLAY_LENGTH = 1000;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.splashscreen);

        /* New Handler to start the Menu-Activity 
         * and close this Splash-Screen after some seconds.*/
        new Handler().postDelayed(new Runnable(){
            @Override
            public void run() {
                /* Create an Intent that will start the Menu-Activity. */
                Intent mainIntent = new Intent(Splash.this,Menu.class);
                Splash.this.startActivity(mainIntent);
                Splash.this.finish();
            }
        }, SPLASH_DISPLAY_LENGTH);
    }
}

 

(2) activity 의 theme background 를 splash 화면으로 보여주는 방법

res/drawable 안에 splash_backgound.xml 를 만들어준다

<?xml version=”1.0" encoding=”utf-8"?>
 <layer-list xmlns:android=”http://schemas.android.com/apk/res/android">
 
 <item android:drawable=”@color/colorPrimary” />
 
 <item>
 <bitmap
 android:gravity=”center”
 android:src=”@mipmap/ic_launcher” />
 </item>
 
</layer-list>

 

splash_backgound.xml 을 App Theme 의 Style 에 추가한다

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
    <!-- Splash Screen theme. -->
    <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowBackground">@drawable/splash_background</item>
    </style>
</resources>

 

 

manifest.xml 매니페스트 파일에 변경된 사항을 등록한다

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.androidjavapoint.splashscreen">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".SplashActivity"
            android:theme="@style/SplashTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".HomeActivity" />
    </application>
</manifest>

 

splash activity 를 위한 빈 액티비티를 하나 만들어 준다

package com.androidjavapoint.splashscreen;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
public class SplashActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Start home activity
        startActivity(new Intent(SplashActivity.this, HomeActivity.class));
        // close splash activity
        finish();
    }
}

 

참고 사이트 >>

https://android.jlelse.eu/the-complete-android-splash-screen-guide-c7db82bce565

https://lanace.github.io/articles/right-way-on-splash/

https://yoo-hyeok.tistory.com/31

Comments