반응형
시작
아무런 설정 값 없이 안드로이드에서 화면을 회전하면 보통 destroy 후 다시 create를 하는 방식으로 진행 된다. 이 때, 기존에 설정했던 값들이 모두 초기화 되어 문제가 발생하게 되는데, 해결 방법은 아래와 같다.
- onSaveInstanceState(@NonNull Bundle outState) 를 이용해 onCreate에서 저장한 값을 다시 불러온다.
- AndroidManifest.xml에 configChanges 속성을 추가한다.
이번 게시물에서는 2 번의 방법에 대해 정리하려 한다.
configChanges 속성 추가하기
configChanges의 속성 중에서 화면 회전에 관련된 속성은 orientation과 screenSize가 있다.
orientation | 화면 방향이 변경되었습니다. 사용자가 기기를 회전했습니다.참고: 애플리케이션이 Android 3.2(API 레벨 13) 이상을 대상으로 하는 경우 기기가 가로 방향과 세로 방향도 전환하므로 "screenSize" 구성도 선언해야 합니다. |
screenSize | 사용 가능한 현재 화면 크기가 변경되었습니다.이는 현재 가로세로 비율에 비례하는 현재 사용 가능한 크기의 변경을 나타내므로 사용자가 가로 모드와 세로 모드 사이를 전환할 때 변경됩니다. API 레벨 13에서 추가되었습니다. |
Android 3.2 이상 부터는 orientaion 뿐 아니라 screenSize 속성도 같이 추가해야 화면 회전 시 함수가 호출된다고 하니 두 속성을 모두 넣어줘야 한다.
android:configChanges="orientation|screenSize"
onConfigurationChanged 호출
onConfigurationChanged 함수는 Activity와 Fragment 두 곳 모두에서 호출 할 수 있다.
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Log.d("test", "ORIENTATION_PORTRAIT: width=" + newConfig.screenWidthDp + ", height=" + newConfig.screenHeightDp);
}
else{
Log.d("test", "ORIENTATION_LANDSCAPE: width=" + newConfig.screenWidthDp + ", height=" + newConfig.screenHeightDp);
}
}
화면을 회전시키면 newConfig에 orientation과 size에 관한 정보가 담겨 함수가 호출될 것이다.
'개발 > Android' 카테고리의 다른 글
[Android] 단말기 정보 가져오기 (0) | 2023.08.03 |
---|---|
[Open Source] AudioTrack 소개 및 PCM 파일 재생 (0) | 2023.07.26 |
[Android] Window에서 LogFilter 사용 하기 (0) | 2023.07.20 |
[Android] ExecutorService를 이용해 AsyncTask 대체하기 (0) | 2023.07.20 |
[Android] Open Source Library 표시하기 (0) | 2023.07.20 |