-
[Android] background theme를 이용한 splash screenprograming/Mobile 2019. 5. 12. 17:07
안녕하세요, Einere입니다.
(ADblock을 꺼주시면 감사하겠습니다.)
오늘은 android에서 background theme를 이용한 로딩 화면(splash screen)을 구현해보록 하겠습니다.
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/moomincon_like" android:gravity="center" /> </layer-list>
res/drawable/splash_background.xml
위와 같이 코드를 작성합니다.
두번째 item태그의 drawable속성의 속성값을 jpg, png등의 비트맵 파일로 설정하시면 됩니다.
당연히 res/drawable에 해당 파일도 추가해야 합니다.
간혹 <item>의 자식으로 <bitmap>을 사용하는 코드가 있는데, 해당 코드는 ResourceNotFoundException을 발생시키는 경우가 있다고 합니다.
위의 코드대로 하면 해결된다고 하며, 갤s7기준으로 잘 작동하는 것을 확인했습니다.
styles.xml
<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> <!-- Splash theme. --> <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar"> <item name="android:windowBackground">@drawable/splash_background</item> </style> </resources>
res/values/styles.xml
위와 같이 코드를 작성합니다.
첫번째 style태그는 기본적으로 생성되어 있을 것입니다.
그러므로 두번째 style태그를 추가하면 됩니다.
SplashActivity.java
public class SplashActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = new Intent(this, ConnectionActivity.class); startActivity(intent); finish(); } }
myPackage/SplashActivity.java
위와 같이 코드를 작성합니다.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="myPackage"> ... <application> ... <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> <activity android:name=".main.MainActivity" /> ... </application> </manifest>
위와 같이 코드를 작성합니다.
application태그의 자식으로 activity태그를 추가한 후, theme속성값을 설정합니다.
그리고 로딩 화면이 제일 먼저 실해오디도록 intent-filter태그를 자식으로 달아줍니다.
참고
dudmy님의 포스트 - 개선된 로딩 화면 (Splash Screen)
개선된 로딩 화면 (Splash Screen) - Dudmy's DevLog
예전에 안드로이드 로딩 화면 구현하기에 대해 포스팅한 적이 있다. 같은 내용에 대해 다시 글을 작성하는 이유는 보다 나은 방법을 알게 되었기 때문이다. 기존의 구현 위의 포스팅을 확인해보면 알겠지만, 기존에 사용했던 방법은 핵심은 로딩 화면에서 Handler.postDelayed를 이용하여 일정 시간의 지연을 주는 것이다. 이러한 구현 방법에 대해 사용자의 입장과 개발자의 입장에서 다시 한번 고민할 필요가 있다. 1. 일정 시간의 기준? 로딩 화면 지연을
dudmy.net
soulduse님의 포스트 - 스플래시 화면에서 xml을 사용시 에러해결
스플래시 화면에서 xml을 사용시 에러해결
앱을 만들고 스플래시 화면을 단순 theme로 보여주는데 앱 실행과 동시에 앱이 죽는 것이 아닌가? 아래와 같은 에러가 발생되었다. org.xmlpull.v1.XmlPullParserException: Binary XML file line #6: re..
soulduse.tistory.com
'programing > Mobile' 카테고리의 다른 글
[React Native] Insight (0) 2020.10.24 [Android] camera2 API - 검은 사진이 찍히는 현상 해결 방법 (0) 2019.08.23 [Android] Base64를 이용한 encoding시 주의점 (1) 2019.04.01 [Android Studio] 협업과 Instant Run 관련 에러 해결 방법 (0) 2019.03.30 [Android] dp를 px로 변환하는 법 (0) 2019.03.18 댓글