티스토리 뷰
이 글은 Big Nerd Ranch에 Chris Stewart가 기고한 글에서 발췌 및 각색한 내용 입니다.
원문은 아래 링크에서 참고하실 수 있습니다.
https://www.bignerdranch.com/blog/splash-screens-the-right-way/
안드로이드 애플리케이션에서 스플래시 스크린 - 앱을 실행할 때 주로 앱 로고를 중앙에 띄우는 인트로 페이지죠 - 은 곧바로 메인페이지로 넘어가기엔 밋밋해서 넣는 경우도 있는데 사실 이외에 다른 목적도 있습니다. 예를 들면 불러오는데 시간이 걸리는 데이터들을 (하지만 곧바로 쓰일) 인트로 화면을 띄워놓은 상태에서 미리 가져올 수도 있습니다.
스플래시 스크린은 맨 처음 시작하는 녀석이고 그렇기때문에 곧바로 준비되어야 하기 때문에 액티비티에서 layout file이 inflate되기도 전에 보여야 합니다.
그렇기 때문에 layout file에 스플래시 스크린을 디자인하는 것은 좋지 않습니다.
대신 백그라운드 액티비티의 테마 백그라운드로 만들 수 있습니다.
우선 아래와 같이 drawable 파일을 만들어 배경색과 중앙에 이미지를 설정합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!--drawable/splash.xml--> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/gray"/> <item> <bitmap android:gravity="center" android:src="@mipmap/ic_launcher"/> </item> </layer-list> | cs |
다음으로 이걸 스플래시 액티비티의 백그라운드 테마로 설정합니다. style.xml 파일로 가서 스플래시 액티비티를 위한 새로운 테마를 추가합니다.
1 2 3 4 | <!--values/style.xml--> <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar"> <item name="android:windowBackground">@drawable/splash</item> </style> | cs |
다음으로 매니페스트에서 이 테마를 스플래시 액티비티에 설정해봅니다.
1 2 3 4 5 6 7 8 9 | <activity android:name=".SplashActivity" android:theme="@style/SplashTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> | cs |
이렇게 하면 이제 시작할 때 딜레이 없이 스플래시 화면이 뜨게 됩니다!
스플래시 액티비티가 띄워지고 메인페이지로 넘어가는 로직은 액티비티 내에서 구현을 해주면 되겠죠?
저 같은 경우 스플래시 액티비티에서 서버로 요청을 보내 현재 사용자가 세션을 유지하고 있는지 확인한 후 콜백을 받아서 로그인 세션이 있는 경우 메인 페이지로 그렇지 않다면 로그인 페이지로 넘어가는 로직을 구현했습니다.
이 방법을 알기 전까지는 계속 layout file을 이용해 스플래시 스크린을 만들어 왔는데요. 안 그럴 수도 있지만 레이아웃을 inflate하는 작업이 조금 늦어지면 스플래시 화면이 곧바로 보이지 않을 수도 있을 것 같고 확실히 이 방법이 더 깔끔하다는 생각이 듭니다.
[+추가]
하지만 위의 방법을 사용하면 발생하는 문제가 한 가지 있습니다. 만약 Layout file을 사용했다면 이미지 크기를 DP값으로 자유자재로 설정할 수 있는데 위의 drawable 파일에서 bitmap으로 가져온 이미지의 크기를 변경할 수 없다는 점입니다. 이 부분에 대해서 어떻게 bitmap 크기를 변경시킬 수 있을지 조사를 해보았는데 현재까지 얻은 결론은 bitmap이미지 크기는 변경할 수 없으며 그렇기 때문에 각 해상도에 적합한 이미지를 따로 준비해야 한다는 것이었습니다.
즉, 해상도가 다른 디바이스에서 같은 스플래시 화면을 보이기 위해서는 여러 크기의 이미지를 준비해야 합니다. (꼭 같아야 할 필요가 없다면 적당한 크기의 이미지 하나만 사용하여도 상관없을 것 같습니다)
'거인의 어깨위에 서려는 > 앱 개발자를 위한' 카테고리의 다른 글
[안드로이드] 개발할 때는 잘 되다 Google Play 배포후 앱이 죽을 때 (Proguard & Retrofit2) (0) | 2017.02.23 |
---|---|
[안드로이드] Facebook 인증, 릴리즈 버전을 위한 키해시 등록방법 (0) | 2017.02.04 |
[Retrofit] JSON을 JAVA 클래스로 변환시키는 방법 (2) | 2016.11.22 |
[REST API 요청] Retrofit 2.1.0 사용기 (0) | 2016.11.19 |
[앱 배포] MAC에서 zipalign 설정하기 (0) | 2016.09.23 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 안드로이드
- 공존이 필요해요
- 시간 관리
- gradle
- 이미지 여백주기
- git ssh 연동
- 그리고 상상력
- multiDex issue
- 소프트웨어 공학
- 창의성을 지휘하라
- iterms
- patch-packages
- release build issue
- 이미지 일괄 변경
- 애드 캣멀
- node.js
- 좋은 습관이란
- MVP
- git 실수
- 소름돋는필력
- egghead
- 쉽게 말하는법
- 스크럼
- 아키텍처
- 최은영작가님
- Android
- React Native
- retrofit
- 구독료 계산기
- go
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
글 보관함