2022년 10월 10일 월요일

Splash 화면을 좀더 자연스럽게 보여주기(right way)

Splash 화면을 좀더 자연스럽게 보여주기(right way)

Splash 화면을 좀더 자연스럽게 보여주기(right way)

안드로이드에서는 splashTeme 가 있어서 앱기동시에 잠깐 보이는 splash 화면을 좀더 자연스럽게 보이도록 해준다. 안드로이드에서는 앱이 기동되어 화면에 보이지전까지는 아무런표시도 할수 없기때문에, splash테마로 지정한 테마가 일단 보이고 런처액티비티가 보이게된다.
따라서 초기스플래쉬 화면을 보이고 나서 몇초간 멈출필요가없다면 그냥 런처에 SplashTheme를 지정한 액티비티를 레이아웃없이 기동하면된다.

//AndroidManifest.xml
<activity  
  android:name=".splashscreen.SplashActivity"  
  android:noHistory="true"  
  android:theme="@style/SplashTheme">  
    <intent-filter>  
        <action android:name="android.intent.action.MAIN" />  
        <category android:name="android.intent.category.LAUNCHER" />  
    </intent-filter>  
</activity>
//stytes.xml
...
    <!-- Splash theme. -->  
  <style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">  
        <item name="android:windowBackground">@drawable/splash_background</item>  
    </style>
 ...
//splash_background.xml
<?xml version="1.0" encoding="utf-8"?>  
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"  
  android:opacity="opaque">  
    <item android:drawable="@android:color/white" />  
    <item  
  android:drawable="@drawable/miseru_splash_logo"  
  android:gravity="center" />  
</layer-list>

SplashActivity.kt

class SplashActivity : BaseActivity() {  
  
    override fun onCreate(savedInstanceState: Bundle?) {  
        super.onCreate(savedInstanceState)  
        //layout을 지정할 필요가 없다.
        showSplash()  
    }  
  
    /**  
 * 스플래쉬 화면 (1초 기다리고, 로그인확인후 로그인상태면 홈화면으로 이동) */  private fun showSplash() {  
        CoroutineScope(Dispatchers.Main).launch {  
  delay(Splash.DELAY)  
            Appplication.instance.loginState = AppPreferences.get(Setting.IS_LOGIN, false)  
            overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);  
            finish()  
        }  
  }  
}

단, 화면을 배경색, 아이콘으로 밖에 구성못한다는 단점이 있다.
참고 : https://medium.com/android-news/right-way-to-create-splash-screen-on-android-e7f1709ba154

0 comments:

댓글 쓰기