StartActivity

sumi Yoo·2022년 11월 25일
0

StartActivity

스플래시 화면이다. Splash API 이용.

gradle

//splashscreen
implementation 'androidx.core:core-splashscreen:1.0.0'

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

<activity
            android:name=".ui.start.StartActivity"
            android:exported="true"
            android:theme="@style/Theme.App.Starting">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

2. 테마 정의(themes.xml)

<resources>
    <!-- Base application theme. -->
    <style name="Theme.Promise" parent="Theme.MaterialComponents.DayNight.NoActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/pure_blue</item>
        <item name="colorPrimaryVariant">@color/pure_blue</item>
        <item name="colorOnPrimary">@color/white</item>
        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/azure_radiance</item>
        <item name="colorSecondaryVariant">@color/azure_radiance</item>
        <item name="colorOnSecondary">@color/black</item>
        <!-- Status bar color. -->
        <item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
        <!-- Customize your theme here. -->
    </style>

    <style name="Theme.App.Starting" parent="Theme.SplashScreen">
        <item name="windowSplashScreenBackground">@color/pure_blue</item>
        <item name="windowSplashScreenAnimatedIcon">@drawable/ic_splash_foreground</item>
        <item name="postSplashScreenTheme">@style/Theme.Promise</item>
    </style>
</resources>
  • windowSplashScreenBackground: 스플래시의 배경
  • windowSplashScreenAnimatedIcon: 스플래시에 보일 아이콘 (png, jpg, webp or drawable)
  • postSplashScreenTheme: 스플래시가 끝난 후 보일 화면의 테마

앱의 시작 화면이 될 엑티비티에서 super.onCreate(savedInstanceState) 전에 installSplashScreen() 을 추가해 줍니다.

override fun onCreate(savedInstanceState: Bundle?) {

        installSplashScreen().apply {
            setKeepOnScreenCondition {
                initObserver() // 로그인 여부 체크
                true // 시작 화면을 화면에 유지할지 여부를 결정하기 위해 평가되는 조건
               
            }
        }
        super.onCreate(savedInstanceState)
    }

flase 일때 중간에 흰 화면이 지나감. (기본 화면을 빈 화면으로 놨음.)

private fun initObserver() {
        if (startViewModel.isSignUp.hasActiveObservers().not()) {
            startViewModel.isSignUp.observe(this@StartActivity) { isSignUp ->
                val intent = Intent(
                    this@StartActivity,
                    if (isSignUp) PromiseCalendarActivity::class.java else SignUpActivity::class.java
                )
                startActivity(intent).also { finish() }
            }
        }
    }

isSignUp 이 true (로그인이 되어 있다면 캘린더 화면으로 이동)
아니면 회원가입 화면으로 이동

0개의 댓글