마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 스튜디오 스플래시 화면 질문드립니다!! 도와주세요 ㅜㅜ

0 추천
안녕하세요 안드로이드 프로젝트를 진행하다가 로딩화면을 만드려고 여러 영상이나 글들을 보고 그대로 따라 해보았는데 적용되지 않는 것 같아 질문 남깁니다...

https://www.youtube.com/watch?v=1JZngp8Alyc

위 링크의 영상을 토대로 스플래시 화면을 구현해보았는데 drawable 이미지로 넣은 사진이 뜨지 않고 기본 어플의 로고만 뜹니다...게다가 이 방법으로 구현했을때 이미지가 변화하지 않아서 다른 방법을 찾다가 액티비티를 새로 만들어 구현해봤더니 어플 실행시 어플 로고가 뜨는 화면과 액티비티로 구현한 화면이 둘 다 뜨게 됩니다 ㅜㅜ

 

혹시 스플래시 화면의 기본 이미지를 변경하는 방법이나 어플 실행시 제일 처음에 로고가 뜨는 화면을 제거하는 방법을 알고 계신다면 도움 부탁드리겠습니다 ㅜㅜ
꾸준히 쌓자 (160 포인트) 님이 2022년 6월 9일 질문

1개의 답변

0 추천

네, Android 12 부터는 Splash screen이 기본으로 추가되어 있기 때문에 무조건 추가하시면 두개가 뜨게됩니다. 아래 링크를 읽어보시면 자세한 내용을 확인할 수 있습니다.
https://developer.android.com/guide/topics/ui/splash-screen

다른 방법도 있겠지만 API레벨에 상관없이 splash screen을 구현하는 손쉬운 방법은 API31부터 추가된 splash screen API를 사용하는 것 같네요.

먼저 아래 dependency를 build.gradle에 추가하세요.  compileSdk는 31롤 설정하시는거 잊지마시구요.

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

 

res/values/xml에 아래와 같이 Splash screen용 theme을 추가하세요.

<style name="Theme.App.Starting" parent="Theme.SplashScreen" >
        <item name="windowSplashScreenBackground">@color/teal_700</item>
        <item name="windowSplashScreenAnimatedIcon">@drawable/splash_image</item>
        <item name="windowSplashScreenAnimationDuration">3000</item>
       <!-- 이게 중요한듯. 앱의 theme이름 -->
        <item name="postSplashScreenTheme">@style/Theme.App</item>
    </style>

각 항목에 대한 자세한 설명은 아래 링크를 보시면 나오니 참고하세요. 저도 그래도 따라한거예요.
https://developer.android.com/guide/topics/ui/splash-screen/migrate

AndroidMainfest.xml에 가서 시작 액비티티의 theme에 위에서 정의한 theme을 설정하세요.

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

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

마지막으로 MainActivity에 가서 splash screen 초기화를 해줍니다. super.onCreate 앞에 installSplashScreen을 호출하세요.

override fun onCreate(savedInstanceState: Bundle?) {
        installSplashScreen()
        super.onCreate(savedInstanceState)
}

 

이게 끝입니다. API 31전후로 잘 동작하는 걸 확인했습니다.

spark (227,930 포인트) 님이 2022년 6월 9일 답변
spark님이 2022년 6월 10일 수정
...