Anyway

[Android Studio] 스플래시 화면 만들기 (앱 타이틀 화면, 로고 화면) 본문

개발

[Android Studio] 스플래시 화면 만들기 (앱 타이틀 화면, 로고 화면)

무튼 2021. 6. 6. 19:37
반응형

어플을 키면 제작사 로고가 잠깐 나타났다가 사라진 후 메인 화면이 보인다.

이 화면을 스플래시 화면이라고 한다.

스플래시 화면은 단순히 보여주기 용도로 넣는 경우도 있지만, 주로 앱에서 필요한 리소스들을 다운받을 때 대기 화면 용도로 사용한다.

 

만드는 방법은 간단하다. 스플래시 액티비티 화면을 따로 만들고, 메인 액티비티로 넘어가면 된다.

 

1. 스플래시 액티비티 생성

첫 화면으로 사용되므로 보통은 제일 처음 만들어지는 MainActivity 를 활용한다.

만약 별도의 스플래시 액티비티를 생성했다면, 첫 화면에 띄우기 위해 AndroidManifest.xml 에 다음과 같이 입력하자.

...

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

...

intent-filter 부분이 바로 해당 액티비티를 첫 화면으로 쓰겠다는 의미다.

 

2. 타이틀과 액션바 없애기

생성한 액티비티에 타이틀과 액션바를 없애보자.

먼저 res > values > themes > themes.xml 에 다음을 추가한다.

...

<style name="SplashTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
</style>

...

 

그리고 다시 AndroidManifest.xml  로 돌아와서 아래처럼 수정한다.

...

<activity android:name=".TitleActivity" android:theme="@style/SplashTheme">

...

 

3. 화면 생성

이제 스플래시로 보여줄 화면을 만들어보자.

 

첫번째 방법은 Theme 를 활용하여 background 로 로고를 보여주는 방식이다.

res > mipmap 에 사용할 이미지를 추가한다. (drawble 을 이용해도 된다).

그 다음 res > values > themes > themes.xml 에서 아까 추가했던 것을 아래처럼 수정한다. 내가 추가한 이미지는 title.png 이다.

...

<style name="SplashTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        ...
        <item name="android:windowBackground">@mipmap/title</item>

...

이러면 title.png 가 화면 꽉 차게 나타난다.

 

두번째 방법은 layout xml 파일을 띄우는 것이다. 자신이 원하는 Layout xml 파일을 쓰면 된다.

 

4. 자바 코드

3초동안 화면을 보여주고 메인화면으로 넘어가는 자바 코드를 짜보자.

package //자신의 패키지
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;

public class TitleActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_title);	//theme로 지정했다면 삭제한다.
        
        moveMain(1);	//1초 후 main activity 로 넘어감
    }

    private void moveMain(int sec) {
        new Handler().postDelayed(new Runnable()
        {
            @Override
            public void run()
            {
                //new Intent(현재 context, 이동할 activity)
                Intent intent = new Intent(getApplicationContext(), MainActivity.class);

                startActivity(intent);	//intent 에 명시된 액티비티로 이동

                finish();	//현재 액티비티 종료
            }
        }, 1000 * sec); // sec초 정도 딜레이를 준 후 시작
    }
}

참고로 thread.sleep 으로 delay 를 주면 layout 로딩도 같이 멈추므로 n초 후 실행되는 postDelayed 를 이용하였다.

 

완성된 화면~

반응형