본문 바로가기
개발/Android

[Android] Splash 화면 구현하기 (by Kotlin)

by tempus 2021. 10. 13.
반응형

Splash 화면이란?

앱을 실행할 때 보여주는 시작화면을 말합니다. 짧게는 1초에서 길게는 5초까지 보여줍니다.


보통 앱 실행 시 앱의 정체성을 보여주거나 필요한 데이터를 로딩하기 위해 사용합니다. 하지만 의도적으로 앱 실행을 지연시키거나 작업을 처리하는 용도로 사용하는 것은 지양합니다.

 

Android에서 Splash 화면 구현하기

일반적인 Activity를 구현하는 방식으로 Splash 화면을 구현할 수 있습니다. 하지만 layout.xml 부르게 된다면 오히려 Splash 화면에서 시간과 리소스가 낭비되기 때문에 여기서는 좀 더 효율적인 방법으로 만들어 보겠습니다.

splash_gif



우선 Splash 화면의 배경으로 사용할 xml을 만들어 줍니다.

background_splash.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/main_color"></solid>
</shape>

 

themes.xml에 style을 추가해줍니다.

<resources xmlns:tools="http://schemas.android.com/tools">  
    <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowBackground">@drawable/background_splash</item>
    </style>
</resources>

 

manifest파일에 application 태그 안에 다음 내용을 추가해줍니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.com.testing">
    <application>
        <!--아래 부분 추가-->
        <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>
		<!---------------->
    </application>
</manifest>

 

SplashActivity를 만들어줍니다.

SplashActivity.kt

class SplashActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val intent = Intent(applicationContext, MainActivity::class.java)
        startActivity(intent)
        finish()
    }
}

 

화면이 너무 빨리 넘어가서 시간을 지정해주고 싶다면 아래의 코드로 변경해주시면 됩니다. (2초 지연)

class SplashActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        Handler(Looper.getMainLooper()).postDelayed({
            val intent = Intent(applicationContext, MainActivity::class.java)
            startActivity(intent)
            finish()
        }, 2000)
      
    }
}

 

반응형

댓글


loading