-
[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)
soulduse님의 포스트 - 스플래시 화면에서 xml을 사용시 에러해결
'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 댓글