소프트웨어개발/Android

안드로이드 스플래시 스크린 만들기

날개 2018. 11. 28. 17:45

스플래시 스크린 (Splash screen) 이란 프로그램(앱)이 실행될때 잠시 나타나는 화면을 말합니다. 다른 말로는 런치 스크린 또는 로고 화면이라고 부르는 분들도 있습니다.


개발자들은 각자 안드로이드에서 여러가지 방법으로 스플래시 스크린을 만듭니다. 대체로 많이 쓰는 방법이 스플래시 액티비티를 만드는 방법입니다.


물론, 로딩이 필요한 앱들은 스플래시 액티비티에서 로딩까지 처리한 다음에 메인 액티비티로 넘어가게 하는 방법을 많이 사용할 것입니다.


하지만, 로딩이 그다지 필요하지 않은 경우에 스플래시 액티비티를 일반 액티비티를 만드는 방법대로 만든다면, 처음에 앱이 실행되면서 빈 공백의 흰색 또는 검정색의 화면 후에 스플래시 화면이 잠깐 뜨고 (임의로 지정된 시간동안 띄운다면) 사용자의 시간만 뺏는 경우가 될 것입니다. 이것은 사용자 입장에서는 오히려 불편함을 느끼게 할 수도 있습니다.


구글에서 만든 앱들을 실행해 보면 아이콘을 누른 순간부터 스플래시 화면이 확대되면서 나타나는 것을 볼 수 있을 것입니다. 말 그대로 실행해서 앱이 돌아가기 직전까지만 잠깐 보여 주는 것이죠.


그러면, 어떻게 이런 스플래시 스크린을 구현할 수 있을까요? 어렵지 않습니다.


먼저, 여기서 설명할 방법은 https://www.bignerdranch.com/blog/splash-screens-the-right-way/ 의 내용을 일부 수정해서 현재 제 앱에 사용하는 방법이라는 것을 말씀 드립니다.



1. 스플래시 스크린에 사용할 이미지 준비


먼저 스플래시 스크린에서 사용할 이미지(로고나 타이틀 등)를 준비합니다. 여기저 저는 이 파일 이름을 logo_for_splash.png 라고 하겠습니다.


이 파일을 drawable 의 적절한 해상도 이미지 폴더에 복사해 넣습니다.



2. 스플래시 드로우어블 작성


drawable에 스플래시 화면으로 사용할 xml 파일을 생성합니다. 저는 splash_background.xml 이라는 파일로 만들었습니다.


아래와 같은 방법으로 xml 파일의 내용을 채웁니다.


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

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">


    <item

        android:drawable="@color/colorPrimary"/>                values/colors.xml 에 미리 만들어둔 배경으로 채울 색상입니다.


    <item>

        <bitmap

        android:gravity="center"                                              이미지 파일을 정 중앙에 그립니다.

        android:src="@drawable/logo_for_splash"/>               조금전에 drawble에 복사해 넣은 로고등의 이미지 파일입니다.

    </item>

</layer-list>



3. 테마 생성


위에서 만든 스플래시 드로우어블 리소스를 사용하는 액티비티 스타일 테마를 만들어 줍니다.


values/styles.xml 파일에 아래의 내용을 추가해 주면 됩니다.


<resources>


.

.

.


    <!-- For Splash Screen -->

    <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">        스플래시 화면이니 위에 액션바(툴바)가 없어야겠죠?

        <item name="android:windowBackground">@drawable/splash_background</item>        위에서 만든 xml 파일 이름을 써줍니다.

    </style>


</resources>




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


이제 위 테마를 사용한 스플래시 액티비티를 만들어 줍니다.


먼저 AndroidManifest.xml 에서 액티비티를 정의해 줍니다.


.

.

.

        <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>

.
.
.



그리고 스플래시 액티비티 클래스에서는 메인 액티비티로 넘어가는 코드만 있으면 되겠죠. (필요에 따라 초기화등 코드 작성 가능)


위 매니페스트 내용대로 SplashAcrivity.kt 를 만들어 줍니다. (코틀린 코드입니다. 자바도 유사합니다.)


.

.

.



class SplashActivity : AppCompatActivity() {


    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)


        val intent = Intent(this, MainActivity::class.java)            // 실제 사용할 메인 액티비티

        startActivity(intent)

        finish()

    }

}


.

.

.


끝입니다. SplashActivity의 UI 레이아웃 XML 은 필요하지 않습니다. 테마에 의해 배경으로 바로 화면이 나오기 때문이죠.


매우 간단하죠?


아래는 그 결과 입니다. 스플래시 화면이 나타난 순간부터 메인화면까지 넘어가는 스크린샷입니다.


  



깔끔하게 나오는것을 볼 수 있습니다.



끝.




(C) 2018 WingsNote.com (무단 복제 및 게시 금지, 링크 허용)