프로젝트에서 스플래쉬 이미지를 띄워줘야 했습니다.
웹뷰가 로드되기전 하얀화면이 뜨게 되고 그 간극을 줄이기 위한 것입니다.
원하던 목적을 완벽히 이루지는 못하였지만
제일 기본 형태의 스플래쉬 띄우는 법을 문서화 하겠습니다.
웹뷰랑 javascriptInterface로 소통하거나 하는 방법들을 입맛에 맞게 사용하시면 됩니다.
사전준비
1. 스플래쉬로 띄우고 싶은 이미지를 준비합니다.
Android
1. res/drawable 아래에 이미지 파일을 추가합니다.
2. res/drawable 아래에 splash.xml 파일을 추가합니다.
// splash.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/test_splash" /> <!-- 추가하고 싶은 이미지 설정 -->
<item>
<bitmap
android:gravity="center" /> <!-- 아이콘 추가하고 싶을 때 작업 -->
</item>
</layer-list>
3. res/styles.xml에 splashTheme 추가
<resource>
<!-- 기존 내용 -->
<style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:background">@drawable/test_splash</item>
<item name="android:windowDisablePreview">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
</resource>
4. AndroidManifest.xml 수정
<activity
android:name=".MainActivity"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden|screenSize|layoutDirection"
android:launchMode="singleTop"
>
</activity>
<!-- 추가되거나 변경되는 부분 -->
<activity android:naem=".SplashActivity"
android:theme="@style/SplashTheme">
<intent-filter> <!-- intent-filter가 두개면 바탕화면에 아이콘 두개 생기고 이상해 집니다.-->
<action android:name="android.intent.action.MAIN" />
<category android:naem="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
5. SplashActivity에 코드 추가
기존에 파일 없으면 생성 후 코드 추가해주시면 됩니다.
아래의 내용중 handler 코드는 딜레이를 주기 위함이고
newRunnable()은 새로운 스레드로 실행시키기 위함입니다.
handler, newRunnable()은 사용하지 않으셔도 됩니다.
public class SplashActivity extends Activity {
Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstantState);
handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
}, 1000);
}
}
실패한 시도들
- webview위에 imageview를 띄워놓고 javascript 인터페이스를 이용 imageview를 안보이게 변경 => imageview를 보이지 않게 할때 webview도 같이 사라져서 계속 실패
- SplashActivity에서 finish 호출 하지 않고 javascript 인터페이스로 SplashActivity finish 해버리기 => startActivity(intent)를 하면 기존의 activity가 대체된다.
시도해볼만한 내용
- 코르도바 네이티브 코드 파헤쳐서 javascript 인터페이스로 소통 splash show/hide 제어
https://github.com/apache/cordova-plugin-splashscreen/blob/master/src/android/SplashScreen.java#L82
출처
https://lanace.github.io/articles/right-way-on-splash/
https://dudmy.net/android/2017/04/09/improved-loading-screen/
'네이티브 > Android' 카테고리의 다른 글
Android Uri.getQueryParameter에 + 들어가면 빈칸으로 바뀝니다. (0) | 2022.01.12 |
---|---|
Android build.gradle 주요 정보 보안 (0) | 2021.12.05 |
Android html5 Geolocation 웹뷰 적용 (0) | 2021.12.01 |
Android 화면 Resizing with windowSoftInputMode (0) | 2021.11.29 |
Android preload 띄우기 (0) | 2021.09.28 |