본문 바로가기
Android

[Android] 화면 회전 시 onConfigurationChanged 호출

by 준그래머 2023. 7. 24.
반응형

시작

아무런 설정 값 없이 안드로이드에서 화면을 회전하면 보통 destroy 후 다시 create를 하는 방식으로 진행 된다. 이 때, 기존에 설정했던 값들이 모두 초기화 되어 문제가 발생하게 되는데, 해결 방법은 아래와 같다.

  1. onSaveInstanceState(@NonNull Bundle outState) 를 이용해 onCreate에서 저장한 값을 다시 불러온다.
  2. AndroidManifest.xml에 configChanges 속성을 추가한다.

이번 게시물에서는 2 번의 방법에 대해 정리하려 한다.

 

configChanges 속성 추가하기

configChanges의 속성 중에서 화면 회전에 관련된 속성은 orientation과 screenSize가 있다.

orientation 화면 방향이 변경되었습니다. 사용자가 기기를 회전했습니다.참고: 애플리케이션이 Android 3.2(API 레벨 13) 이상을 대상으로 하는 경우 기기가 가로 방향과 세로 방향도 전환하므로 "screenSize" 구성도 선언해야 합니다.
screenSize 사용 가능한 현재 화면 크기가 변경되었습니다.이는 현재 가로세로 비율에 비례하는 현재 사용 가능한 크기의 변경을 나타내므로 사용자가 가로 모드와 세로 모드 사이를 전환할 때 변경됩니다. API 레벨 13에서 추가되었습니다.

Android 3.2 이상 부터는 orientaion 뿐 아니라 screenSize 속성도 같이 추가해야 화면 회전 시 함수가 호출된다고 하니 두 속성을 모두 넣어줘야 한다.

 

Android 개발자  |  Android Developers

애플리케이션의 시각적 사용자 인터페이스 일부를 구현하는 활동(Activity 서브클래스)을 선언합니다. 모든 활동은 매니페스트 파일의 {@code} 요소로 나타내야 합니다. 여기에 선언되지 않은 활동

developer.android.com

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에 관한 정보가 담겨 함수가 호출될 것이다.

반응형