예전에 splash화면 띄우는 작업을 한적있었는데, 그때는 SplashActivity를 새로 하나 만든다음에 AndroidManifest에서 SplashActivity에다가 intent-fileter를 적용해주는 방식으로 진행했었다.
그치만 이방법은 SplashActivity를 하나 더 생성해야했고, 레이아웃을 또 디자인해야된다는 번거로움이 있었다.
찾아보니깐 Material3 방식 SplashScreen을 사용하면 Activity를 따로 생성할 필요없이 아이콘만 지정해주면 가운대에 해당 아이콘이 뜨도록 할 수 있었다.
먼저 의존성을 추가해준다
build.gradle.kts(app)
// Splashscreen
implementation ("androidx.core:core-splashscreen:1.0.0")
themes.xml
테마에 들어가서 splashscreen관련 속성을 정의해준다
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Base.Theme.Jikimi" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Customize your light theme here. -->
<item name="colorPrimary">@color/white</item>
<item name="android:statusBarColor">@color/white</item>
<item name="android:windowLightStatusBar">true</item>
</style>
<style name="Theme.Jikimi" parent="Base.Theme.Jikimi" />
<!-- floating action button 원형으로-->
<style name="FloatingActionButton" parent="">
<item name="cornerFamily">rounded</item>
<item name="cornerSize">32dp</item>
</style>
<!--splash 화면-->
<style name="Theme.App.Splash" parent="Theme.SplashScreen">
<item name="windowSplashScreenBackground">@color/background_pink</item> <!--배경색-->
<item name="windowSplashScreenAnimatedIcon">@drawable/splash</item>
<item name="windowSplashScreenAnimationDuration">500</item>
<item name="postSplashScreenTheme">@style/Theme.Jikimi</item>
</style>
</resources>
windowSplashScreenBackground
-> 배경색 단색으로 설정
windowSplashScreenAnimationDuration -> 스플래시 화면 아이콘 애니메이션의 지속 시간 설정
windowSplashScreenIconBackgroundColor -> 스플래시 화면 아이콘 뒤의 배경을 설정 (창 배경과 아이콘 사이에 대비가 충분하지 않은 경우에 유용)
windowSplashScreenBrandingImage -> 스플래시 화면 하단에 표시되도록 이미지를 설정(브랜드 네임 이미지 표시같은거) / 그러나 디자인 가이드라인에서는 브랜드 이미지 사용을 권장하지 않음
windowSplashScreenBehavior -> Android 13 이상에서 앱이 항상 스플래시 화면에 아이콘을 표시할지 여부를 지정
빈 스플래시 화면을 표시하지 않고 항상 애니메이션 아이콘을 표시하려면 이 값을 icon_preferred로 설정
<item name="android:windowSplashScreenBehavior">icon_preferred</item>
이제 Menifest로 가서 application이나 activity부분에 아래와 같이 코드를 작성해준다. (theme에 지정해준 splashscreen속성의 이름으로 설정해줌)
<manifest>
<application android:theme="@style/Theme.App.Splash">
<!-- or -->
<activity android:theme="@style/Theme.App.Splash">
...
나는 activtiy부분에 아래와같이 작성해줬다.
<activity
android:name=".presentation.activity.MainActivity"
android:exported="true"
android:theme="@style/Theme.App.Splash">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
MainActiviy.kt
그런다음 최종적으로 MainActiviy에 가서 splashScreen을 실행하기위해 installSplashScren()함수를 실행시켜줘야한다.
근데 여기서 주의해야될점이 MainAcivity가 onCreate되기전에 splash가 실행되야되기 때문에 Oncreate되기전에 해당 함수를 작성해줘야된다!!!
난 onCreate이후에 작성해버렸더니 오류가 발생하면서 앱이 종료되는 문제가 발생했다ㅠ
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
// splashScreen 실행
installSplashScreen()
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
setupNavigation()
}
private fun setupNavigation() {
val navHostFragment = supportFragmentManager.findFragmentById(R.id.fcv_main) as NavHostFragment
navController = navHostFragment.navController
// BottomNavigation 설정
binding.bottomNavBar.setupWithNavController(navController)
// bottomNavBar 선택했을 때 해당뷰로 이동
binding.bottomNavBar.setOnItemSelectedListener { item ->
NavigationUI.onNavDestinationSelected(item, navController)
true
}
}
fun hideBottomNavigation() {
binding.bottomNavBar.visibility = View.GONE
}
fun showBottomNavigation() {
binding.bottomNavBar.visibility = View.VISIBLE
}
}
이렇게 코드를 작성해주면 따로 SplashActivty를 생성하지않고 스플래쉬화면을 구성할 수 있다는 장점이 있다.
그치만 아직은 해당 SplashScreen API는 아이콘과 브랜드네임을 표시하는 기능밖에 없기때문에 스플래쉬화면을 복잡하게? 만들어야하는 상황이면 따로 SplashActivty를 만들어야될것같다.
구현해야하는 상황에따라 더 적합한 방법으로 구현하면 될것같다.
참고 공식문서 보면 아이콘 규격사항이 나와있어서 피그마로 맞춰서 제작해주니 이쁘게 아이콘이 나온다
https://developer.android.com/develop/ui/views/launch/splash-screen?hl=ko#kts
스플래시 화면 | Views | Android Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. 스플래시 화면 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 중요: Android 11 이하에서 맞춤 스플래시
developer.android.com
https://developer.android.com/develop/ui/views/launch/splash-screen/migrate?hl=ko
스플래시 화면 구현을 Android 12 이상으로 이전 | Views | Android Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. 스플래시 화면 구현을 Android 12 이상으로 이전 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android 11
developer.android.com
'Android > Android 핵심기술' 카테고리의 다른 글
[Android/Kotlin] pdf 뷰어 띄우기 (0) | 2025.04.29 |
---|---|
[Android/Kotlin] SAA(Single Activity Architecture)란? (0) | 2024.08.19 |
[Android/Kotlin] Naver Map API 사용법 (2) | 2024.08.18 |
[Android/Kotlin] KakaoMap API Android v2 사용하기 (7) | 2024.05.27 |
[Android/Kotlin] Google Map API 사용해서 구글 지도맵 구현하기 (0) | 2024.05.01 |