[Android] 화면 회전&고정 - ActivityInfo

JJAE WON·2025년 1월 1일
post-thumbnail

특정 화면에서 가로, 세로 모드를 고정해야하는 상황이 생겼다.

나의 상황은 특정 프래그먼트가 최상위로 올라왔을때 가로로 회전이 안되어야 하는 조건이었다.

안드로이드에서 화면제어는 일반적으로 메니페스트에 선언함으로써 고정적으로 진행이 되는데 이러한 경우는 동적으로 변경이 되어야 하는 상황이었는데.. 어떻게 하는지 몰라서 찾아보았다 !


AndroidManifest 선언

<activity android:name="MainActivity"
          android:screenOrientation="landscape"
             />

고정적으로 선언한 방법대로 사용하고 싶을 경우 screenOrientation 속성을 통해 선언한다.

여기서 주의할점 !!

화면이 가로 세로로 변경되면서 계속 onDestroy()onCreate() 가 호출되고 싶지 않다면 매니페스트에 android:configChanges="orientation" 을 추가하여 orientation이 변경될 때 화면을 다시 그리지 않겠다고 선언할 것 !
`

Class에서 선언하기

private fun fixOrientation(){
   requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_FULL_USER
}

requestedOrientation 의 값을 ActivityInfo 에 있는 속성으로 지정하여 사용하면 된다.

ActivityInfo 속성값

하나 함께 고려해야할 부분은 디바이스 시스템에 설정되어있는 가로, 세로 모드를 함께 고려해야한다.

  • SCREEN_ORIENTATION_UNSPECIFIED
    : 선호하는 모드가 없다. 시스템에게 결정권을 준다.
  • SCREEN_ORIENTATION_LANDSCAPE
    : 가로모드
  • SCREEN_ORIENTATION_PORTRAIT
    : 세로모드
  • SCREEN_ORIENTATION_USER, 사용자가 선호하는 방향
  • SCREEN_ORIENTATION_BEHIND
    : 뒤에 있는 액티비티와 같은 방향
  • SCREEN_ORIENTATION_SENSOR
    : 오리엔테이션 센서로 결정
  • SCREEN_ORIENTATION_NOSENSOR
    : 오리엔테이션 센서 무시하기
  • SCREEN_ORIENTATION_SENSOR_LANDSCAPE
    :가로모드를 선호하지만 센서로 변경 가능
  • SCREEN_ORIENTATION_SENSOR_PORTRAIT
    : 세로모드를 선호하지만 센서로 변경 가
  • SCREEN_ORIENTATION_REVERSE_LANDSCAPE
    : 가로모드를 180도 회전
  • SCREEN_ORIENTATION_REVERSE_PORTRAIT
    : 세로모드를 180도 회전
  • SCREEN_ORIENTATION_FULL_SENSOR
    : 네 가지 회전을 모두 허용
  • SCREEN_ORIENTATION_USER_LANDSCAP
    : 기본은 가로모드지만 사용자가 센서로 변경 가능
  • SCREEN_ORIENTATION_USER_PORTRAIT
    : 기본은 세로모드지만 사용자가 센서로 변경 가능
  • SCREEN_ORIENTATION_FULL_USER
    : 이것도 SENSOR와 차이를 잘 모르겠음
  • SCREEN_ORIENTATION_LOCKED
    : 현재 위치 고정

디바이스의 가로, 세로 모드와 상관없이 특정 화면이 노출됐을경우 무조건 세로모드만 지원하고 싶다면

SCREEN_ORIENTATION_FULL_USER 를 사용하면 된다.

마무리

xml 기반 화면에 대한 정보이지만 ,, 이제 이 부분이 Compose에서 개발 될 때 어떻게 구성되는지 찾아보고 다음 프로젝트에 적용해야 할 일이 있을때 해당 내용을 적용하고 싶다 !

참고 문헌

profile
앱개발왕 찐천재가 되고싶다.

0개의 댓글