$ cat ./notes/2026-08-20-1303.mdrss ↗

메모 · 2026-08-20 13:03

안드로이드 가로/세로 판별 기준 + UI 전환 시점 정리

판별 기준

  • Configuration.orientation (ORIENTATION_LANDSCAPE/PORTRAIT) 이 제일 안전한 기준. 기기의 natural orientation과 현재 rotation을 시스템이 이미 합쳐서 계산해준 값이라 직접 조합할 필요가 없음.
  • Display.getRotation() (ROTATION_0/90/180/270) 단독으로는 판단하면 안 됨 — natural orientation이 landscape인 태블릿류는 rotation 0이 곧 landscape라, 폰 기준으로 짠 로직을 그대로 쓰면 뒤집힘.
  • width/height 직접 비교도 가능하지만, 폴더블·멀티윈도우 화면에서는 orientation보다 WindowSizeClass(compact/medium/expanded)로 판단하는 쪽이 요즘 권장 방식. 가로모드라도 접힌 폴더블처럼 실제 가용 폭이 좁을 수 있어서 orientation 하나로는 레이아웃 분기가 안 맞음.

UI 변경 시점

  • layout-land/ 리소스 분기를 쓰면 Activity가 재생성되면서 자동으로 바뀜 — 타이밍을 따로 신경 쓸 필요는 없지만 상태 저장(onSaveInstanceState/ViewModel)은 필수.
  • configChanges="orientation|screenSize"로 재생성을 막았다면 onConfigurationChanged() 콜백 시점에 반영. 이 콜백은 회전 애니메이션이 끝나고 새 Configuration이 확정된 뒤에 불리므로, 애니메이션 도중에 미리 바꾸면 깜빡임만 생김.
  • Compose는 LocalConfiguration.current가 그 확정 시점에 recomposition을 트리거해서 별도 처리 없이 자연스럽게 맞음.
  • 멀티윈도우/분할화면 리사이즈는 orientation 변화 없이 screenSize만 바뀌는 경우가 있어서, configChanges에 screenSize도 같이 선언해야 그 시점을 놓치지 않음.
2026-08-20 13:03