Activity에서 일정 시간을 지연시키는 스플래시 화면은 사용자에게 불필요한 대기 시간을 만든다. 앱이 시작되는 동안 Window 배경을 활용해 즉시 스플래시를 표시하고, 첫 화면이 준비되면 자연스럽게 전환하는 방법을 살펴본다.
|
이런 문제점을 보완하여 앱을 로드하는 동안 스플래시 화면을 보여주기 위한 멋진방법을 소개해드리겠습니다.
코드
먼저 스플래시 화면을 사용한 레이아웃을 Drawable로 다시 디자인합니다. layer-list를 이용하여 배경 색상과 로고 이미지를 배치합니다.
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<item android:drawable="@color/colorPrimary"/>
<item>
<bitmap
android:gravity="center"
android:src="@mipmap/ic_launcher"/>
</item>
</layer-list>
이제 Activity에 사용할 테마의 windowBackground값에 이전에 만든 Drawable로 바꿔줍니다.
<style name="SplashTheme" parent="AppTheme">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowBackground">@drawable/splash</item>
</style>
안드로이드 매니페스트에서 런치 될 Activity의 테마를 위에서 만든 스플래시 테마로 설정합니다.
<activity android:name=".MainActivity"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Activity에서 onCreate전 setTheme를 이용하여 원래의 테마로 돌립니다.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
|
Activity가 실행되기 전에 테마의 Background를 Drawable로 구성된 스플래시 화면을 보여주며 Activity가 생성되고 레이아웃 인 플레이트 되기 전 원래의 테마로 돌려줌으로써 스플래시 화면을 위한 Activity를 새롭게 생성할 필요가 없습니다.
이렇게 간단한 리소스를 이용한다면 앱의 초반 로딩 속도가 늦는 경우 로딩 프로그래스 대신 스플래시 화면을 사용하는 것도 나쁘지 않은 선택이 될 것입니다.
모든 코드는 GitHub에 공개되어 있습니다.