금융프로젝트(하이브리드앱) 하면서 폴더블 폰 넓은화면 <-> 접을경우 바깥 화면으로 전환시 웹뷰 상태가 유지가 안되는 문제가 발생했다.
찾아보니 간단하면서도 오묘한? 설정이 필요했다.
MainActivity.java
/*
onSaveInstanceState 함수는 앱이 종료되기 직전 OnDestroy 이전에 호출된다.
폴더블 폰을 접는 행위를 할경우 호출되면서 웹뷰의 상태값을 저장한다.
*/
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
Bundle webViewState = new Bundle();
WebView webView = mIWebview.getWebview(mIWebview.getWebviewListIndex());
webView.saveState(webViewState);
// 웹뷰 번들 상태값 저장
outState.putBundle("webview_state", webViewState);
// 스플레시 UI가 다시 뜨지않게 상태값 저장
outState.putBoolean("splash_state", mIsSplash);
super.onSaveInstanceState(outState);
}
/*
폴더블 폰이 완전 접힐 경우 앱의 라이플 사이클이 다시 동작하기 때문에
onCreate 에서 saveInstanceState를 확인해서 웹뷰에 적용하면 된다.
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null) {
// 저장된
mIWebview.getWebview(mIWebview.getWebviewListIndex()).restoreState(savedInstanceState.getBundle("webview_state"));
mIsSplash = savedInstanceState.getBoolean("splash_state");
} else {
mIWebview.setLoadUrl(App.getInstance().getMain_url());
}
}
AndroidManifest.xml
<!--
웹뷰가 화면 전환시 reload 되지 않고 그대로 짠~~ 하고 유지된 상태로 나타나게 하려면 configChanges 옵션을 주목해야된다.
configChanges="screenLayout|screenSize|smallestScreenSize" 이 3가지 옵션이 있어야만
웹뷰상태가 온전히 유지되면 reload 없이 깔끔하게 화면이 전환된다.
-->
<!--android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"-->
<activity
android:name=".MainActivity"
android:configChanges="orientation|screenLayout|screenSize|smallestScreenSize"
android:screenOrientation="portrait"
android:exported="true">
.... 생략 ....'Android(Java)' 카테고리의 다른 글
| [Android] Mac OS 안드로이드 스튜디오에 내장된 JRE에 인증서를 추가 (0) | 2024.03.26 |
|---|---|
| [Java] 다른 앱 실행시 설치 유무 확인 (0) | 2024.03.25 |
| [Android] 안드로이드 버전 정보 확인 사이트 (0) | 2024.03.15 |
| [Java] base64 형태의 파일 저장 및 로컬푸쉬 알림 (0) | 2024.03.15 |
| [Java] 안드로이드 OS 카메라로 사진촬영 (0) | 2024.03.15 |