기타/Android

[Android / Kotlin] Splash화면 만들기

yujindonut 2022. 3. 10. 13:24
728x90

Splash 화면이란?

이미지나 로고, 현재 버전의 소프트웨어를 포함한 그래픽 요소를 보여주는 화면!

앱의 화면이 나오기전에 1~2초간 나오는 화면이다.

 

화면이 필요한 이유? 넣는 이유?

디자인 적인 요소, 브랜드나 앱의 이미지각인을 위해 넣는다고 한다.

또는, 어플리케이션을 열었을때, 0.x몇초 동안의 공백화면을 채우기 위해서

 

빈 화면이 뜨는 이유?

Application을 실행하면, 첫 Activity의 onCreate()가 실행되기 전에 setTheme()이 먼저 실행된다.

setTheme() : 액티비티에 테마가 지정 되어있을 때 테마를 표시하는 메서드이다.

setTheme() -> onCreate() 순으로 호출되기 때문에 테마가 먼저 나타난 후, 화면 layout이 불러와지는 것

 

theme이 지정되어 있지 않은 경우

: setTheme()이 먼저 호출 되는데, 빈화면이 나타날 것이다! 

MainActivity에는 기본적으로 이 공백을 채우기 위한 theme이 따로 지정되어있지 않음.

setTheme()과 onCreate()의 layoutInflation 사이에 빈화면이 나타나는 것이다.

 

public override fun onCreate(savedInstanceState: Bundle?) {
	super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_splash)
    handler.postDelayed({

        val intent = Intent(baseContext, MainActivity::class.java)
        startActivity(intent)
        finish()
    }, 2000)
}

만약, SplashActivity를 사용해서 Splash화면을 만들면 똑같이, 0.x초의 공백화면이 나타나게 된다!

Activity와 똑같이 layout.xml파일을 불러오기 때문에!

 

Theme을 활용해서 Splash화면을 만들어야한다!!

 

- Splash 화면의 배경으로 활용되는 배경 Xml을 생성

layout이 아닌 drawable에 background_splash.xml파일을 생성해야한다!

item android:drawable = "@color~"/> 부분은 배경색이고

bitmap에는 가운데에 splash_icon을 넣어주는 것!

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

- values/themes.xml에서 SplashTheme을 설정한다.

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Theme.Week9" parent="Theme.MaterialComponents.NoActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/purple_500</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="colorOnPrimary">@color/white</item>
        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>
        <item name="colorOnSecondary">@color/black</item>
        <!-- Status bar color. -->
        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
        <!-- Customize your theme here. -->
    </style>
    <!-- Splash theme. -->
    <style name="SplashTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. -->
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item> 
        <!-- white status bar -->
<!--        <item name="android:windowLightStatusBar">true</item> -->
        <!-- background -->
        <item name="android:windowBackground">@drawable/background_splash</item>
    </style>

</resources>

-SplashAcivity의 기본 Theme을 변경한다

Androidmanifest에서 MainActivity속성에 theme을 설정해준다

 

<activity
            android:name=".SplashActivity"
            android:theme="@style/SplashTheme"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

-SplashActivity

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

        var intent = Intent(this, MainActivity::class.java)
        startActivity(intent)
        finish()
    }
}

 

 

 

 

참고

https://holika.tistory.com/entry/%EB%82%B4-%EB%A7%98%EB%8C%80%EB%A1%9C-%EC%A0%95%EB%A6%AC%ED%95%9C-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%8A%A4%ED%94%8C%EB%9E%98%EC%8B%9CSplash-%ED%99%94%EB%A9%B4%EC%9D%80-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%A7%8C%EB%93%A4%EC%96%B4%EC%95%BC-%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9C%BC%EB%A1%9C-%ED%99%9C%EC%9A%A9%ED%95%A0-%EC%88%98-%EC%9E%88%EC%9D%84%EA%B9%8C

 

[내 맘대로 정리한 안드로이드] 스플래시(Splash) 화면은 어떻게 만들어야 효율적으로 활용할 수

스플래시(Splash) 화면과 그 목적 스플래시 화면은 앱의 본격적인 화면이 나오기 전에 1~2초 간 잠시 나타나는 화면이다. 일반적으로 단색 배경에 어플리케이션의 로고가 중앙에 표시되는 경우가

holika.tistory.com

https://velog.io/@s2ilver8/Android-StudioSplash-%ED%99%94%EB%A9%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0

 

[Android Studio]Splash 화면 만들기

Splash Screen이란? 이미지나 로고, 현재 버전의 소프트웨어를 포함한 그래픽 요소를 보여주는 화면으로 보통 프로그램이 실행되고 있을 때 나오는 화면이다. Splash Screen의 목적 안드로이드 앱을 시

velog.io

 

 

728x90