[Java] Android에서 스플래시 화면을 구현하는 4단계

안녕하세요, momorito입니다.
이번에는 Android 앱을 만들 때 스플래시 화면을 구현하는 절차를 정리해 둡니다.

스플래시 화면을 구현할 때 가능한 방법으로
  • 스플래쉬 화면용 style을 설정해 Activity의 Theme를 바꾸기(Theme교체형)
  • 스플래시 화면에 대한 Activity 생성 및 전환 (Activity 전환 유형)

  • 등이 있습니다만, 이번은 전자의 Theme 교체형으로 구현합니다.

    1 소개



    (1) 완성형



    아래 gif와 같이 앱을 탭 → 스플래시 화면 표시 → 몇 초 후에 원래 테마를 적용하여 MainActivity를 표시하는 것을 목표로 합니다.


    (2) 스플래시 화면 표시의 대략적인 이미지


  • 스플래시 화면을 표시하는 테마를 작성해, 기동시의 Activity(이번은 MainActivity)에 적용한다.
  • MainActivity 를 기동해, onCreate 로 몇 초간 (이번은 2 초) 기다린다.
  • 본래의 Theme를 MainActivity에 적용한다.

  • (3) 전제 조건


  • AndroidStudio 4.1.1 사용
  • AndroidStudio를 시작하고 Create New project에서 Empty Activity를 선택
  • 구현 환경은 에뮬레이터로 Pixel 3 XL (API 29)
  • 사용 언어는 Java

  • 2 실장 순서



    (1) 스플래시 화면용 테마(splash.xml)를 작성한다



    보려는 이미지 준비



    이번에는 아래 이미지를 사용했습니다.

    160px × 160px에서 준비한 png입니다. (표시되는 사이즈라면 다른 사이즈에서도 OK입니다.)
    파일 이름은 splash_logo.png로 설정되었습니다.

    스플래시 화면의 배경색을 설정합니다.



    이번에는 이미지를 화면 중심에 표시하기 때문에 이미지 외부의 배경색을 설정합니다.
    이미지 자체의 배경을 ■#6A91ED로 설정하고 있었으므로, 같은 색을 color.xml에 정의해 둡니다.

    color.xml
    <color name ="background_color">#6A91ED</color>

    splash.xml 만들기



    drawable 폴더에서 마우스 오른쪽 버튼을 클릭 → New → Drawable Resource File을 선택하여 splash.xml을 만듭니다.
    이름은 splash, Root element는 layer-lits로 지정되었습니다.
    splash.xml에는 다음과 같이 설명합니다.

    splash.xml
    <?xml version="1.0" encoding="utf-8"?>
    <layer-list
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:opacity="opaque"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
      <!-- 背景色の設定-->
        <item
            android:drawable="@color/background_color"/> 
    
      <!-- 表示する画像の設定-->
        <item>
            <bitmap
                android:gravity="center"
                android:src="@drawable/splash_logo"/>
        </item>
    
    </layer-list>
    

    여기까지 splash.xml의 완성입니다.

    (2) splash.xml을 적용한 style을 기술한다



    이번에는 res/values ​​안에 themes.xml이 있으므로 그 안에 기재합니다.
    옛날에는 res/values ​​안에 styles.xml을 만들었던 것 같습니다 ... 글쎄, style조차 쓸 수 있다면 문제 없습니다.
    themes.xml에는 다음과 같이 추가합니다.
    덧붙여 parent에는 원래의 Theme를 설정하고 있습니다만, 경우에 따라서는 NoActionBar를 설정하는 편이 깨끗이 할지도 모릅니다.

    Themes.xml
      …
        <style name="SplashTheme" parent="Theme.InfoDevice">
            <item name="android:windowBackground">@drawable/splash</item>
        </style>
      …
    

    (3) MainActivity의 기동시 Theme를 변경한다



    AndroidManifest.xml에 스플래시 화면용 테마를 적용합니다.
    이때 확실히 원래 테마를 기억하십시오.
    (이 예제에서는 원래 Theme_InfoDevice라는 Theme을 적용했습니다.)

    변경 전



    AndroidManifest.xml
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    

    변경 후



    AndroidManifest.xml
            <activity
                android:name=".MainActivity"
                android:theme="@style/SplashTheme" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    

    android:name 이하
    android:theme="@style/SplashTheme"
    

    추기하고 있습니다. (원래 기재가 있으면, @style/...다음을 스플래시 화면용의 Theme에 재기록합니다.)

    (4) MainActivity를 몇 초 기다린 후의 테마로 되돌린다



    MainActivity 시작 후 스플래시 화면의 테마가 적용되었으므로 몇 초 동안 기다린 다음 원래 테마로 돌아갑니다.
    MainActivity에 기재하는 내용은 아래와 같습니다.

    MainActivity.java
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            setTheme(R.style.Theme_InfoDevice);   //元々適用されていたテーマ
            setContentView(R.layout.activity_main);
    
            
    
        }
    
    

    이것으로 완성됩니다.

    좋은 웹페이지 즐겨찾기