적응형 권장사항 및 주의사항

적응형 앱은 전체 기기 화면, 멀티 윈도우 모드의 크기 조절이 가능한 창, 세로 모드 및 가로 모드 방향, 폴더블 기기의 접힌 디스플레이와 펼쳐진 디스플레이 등 모든 크기의 디스플레이를 지원합니다.

구성 설정 및 API의 짧은 목록을 사용하면 적응형 앱을 빌드할 수 있습니다. 하지만 일부 오래된 설정과 API는 적응형 앱과 호환되지 않으므로 피해야 합니다.

크기 조정 가능 여부

적응형 앱은 앱 크기 조절 가능 여부와 멀티 윈도우 모드를 지원합니다.

<activity> 및 <application> 매니페스트 요소의 resizeableActivity 속성은 Android 11 (API 수준 30) 이하에서 멀티 윈도우 모드를 사용 설정하거나 사용 중지합니다. Android 12 (API 수준 31) 이상에서는 속성과 관계없이 대형 화면에서 멀티 윈도우 모드를 지원합니다. 자세한 내용은 멀티 윈도우 모드 지원을 참고하세요.

✓ 권장

앱이 멀티 윈도우, 멀티태스킹 시나리오에 참여하여 사용자 생산성과 만족도를 높일 수 있도록 지원하세요.

앱이 API 수준 24 미만을 타겟팅하는 경우 resizeableActivity="true"를 설정합니다. 그렇지 않으면 신경 쓰지 않아도 됩니다. Android 7.0 (API 수준 24) 이상에서는 기본적으로 true입니다.

✗ 금지사항

API 수준에 대해 resizeableActivity="false"를 설정하지 마세요. 멀티 윈도우 모드가 포함된 사용 사례에서 앱을 제외하지 마세요.

방향

적응형 앱은 디스플레이 크기나 윈도우 모드와 관계없이 세로 모드와 가로 모드를 지원합니다.

screenOrientation 매니페스트 설정은 활동 방향을 제한합니다.

✓ 권장

앱 매니페스트에서 screenOrientation 설정을 삭제합니다.

앱의 방향을 잠근다고 해서 창 크기 변경이 방지되지는 않습니다. 앱은 멀티 윈도우 모드로 전환되거나, 기기가 접히거나 펼쳐지거나, 데스크톱 유형 창의 크기가 조절될 때 크기가 조절됩니다. 앱은 screenOrientation 속성 설정과 관계없이 창 크기 변경을 지원해야 합니다.

✗ 금지사항

활동 방향을 제한하지 마세요. 방향을 잠그는 앱은 대형 화면 기기와 호환되지 않는 창 크기에서 레터박스 처리됩니다.

레터박스 처리된 앱은 태블릿, 폴더블, ChromeOS 기기에서 Google Play의 검색 가능성이 감소합니다.

가로세로 비율

화면과 창 크기가 다양하므로 가로세로 비율도 길고 좁은 비율부터 정사각형, 짧고 넓은 비율까지 다양합니다.

minAspectRatio 및 maxAspectRatio 매니페스트 설정은 앱의 가로세로 비율을 하드코딩된 값으로 제한합니다.

✓ 권장

상대적 크기와 관계없이 디스플레이에 맞게 앱을 조정합니다.

앱 매니페스트에서 minAspectRatio 및 maxAspectRatio 설정을 삭제합니다. 또는 앱의 크기를 조정할 수 있고 가로세로 비율이 자동으로 처리되도록 합니다(크기 조정 가능 여부 섹션 참고).

✗ 금지사항

앱의 상대적 크기를 제어하려고 하지 마세요. 앱이 앱의 가로세로 비율과 호환되지 않는 가로세로 비율의 화면이나 창에서 실행되면 앱이 레터박스 처리됩니다.

Android 14 (API 수준 34) 이상에서는 사용자가 앱의 가로세로 비율을 재정의하여 레터박스 처리된 앱을 사용 가능한 디스플레이 영역에 맞게 확장할 수 있습니다. 기기 호환성 모드를 참고하세요.

창 크기

다양한 디스플레이 크기에 맞게 레이아웃을 최적화하는 것이 적응형 디자인의 핵심 전제입니다. 적응형 앱은 기기 화면 크기가 아닌 앱 창 크기에 중점을 둡니다. 앱이 전체 화면인 경우 앱 창은 기기 화면입니다.

창 크기 클래스는 앱 창의 크기를 결정하고 분류하는 체계적인 방법을 제공합니다. 앱의 창 크기 클래스가 변경될 때 레이아웃을 변경하여 앱을 적응시킵니다.

✓ 권장

창 크기 클래스를 기반으로 앱 창 크기를 평가합니다.

창 크기 클래스를 확인하려면 Compose Material 3 적응형 라이브러리의 currentWindowAdaptiveInfoV2() 최상위 함수를 사용하세요 (지원 중단된 currentWindowAdaptiveInfo() 함수를 대체함). 자세한 내용은 적응형 앱 빌드를 참고하세요.

✗ 금지사항

창 크기 클래스 정의와 내장 API의 유용성을 무시하지 마세요. 지원 중단된 API를 사용하여 창 크기를 계산하지 마세요.

지원 중단된 API

이전 플랫폼 API는 앱 창을 올바르게 측정하지 않습니다. 일부는 기기 화면을 측정하고 일부는 시스템 장식을 제외합니다.

✓ 권장

WindowManager#getCurrentWindowMetrics() 및 WindowMetrics#getBounds()를 사용하여 앱 창의 크기를 가져옵니다. WindowMetrics#getDensity()를 사용하여 디스플레이 밀도를 가져옵니다.

✗ 금지사항

다음 지원 중단된 Display API를 사용하여 창 크기를 확인하지 마세요.

  • getSize(): Android 11 (API 수준 30)에서 지원 중단됨
  • getMetrics(): Android 11 (API 수준 30)에서 지원 중단됨
  • getRealSize(): Android 12 (API 수준 31)에서 지원 중단됨
  • getRealMetrics(): Android 12 (API 수준 31)에서 지원 중단됨

Compose

Jetpack Compose는 적응형 UI 개발을 위해 설계되었습니다. XML도, 레이아웃 파일도, 리소스 한정자도 없습니다. UI를 설명하는 Kotlin 기반 무상태 컴포저블(예: Column, Row, Box)과 UI 요소에 동작을 추가하는 수정자(예: offset, padding, size)

✓ 권장

Compose로 빌드하세요. 최신 기능과 출시 소식을 확인하세요.

✗ 금지사항

오래된 기술에 의존하지 마세요. 앱이 오래되지 않도록 하세요.

Compose Material 3 적응형 라이브러리

Compose Material 3 적응형 라이브러리는 적응형 앱 개발을 용이하게 하는 구성요소와 API를 제공합니다.

✓ 권장

다음 API를 사용하여 앱을 적응형으로 만드세요.

✗ 금지사항

시간을 낭비하지 마세요. 모든 Jetpack Compose 라이브러리에서 제공하는 개발자 생산성 향상을 놓치지 마세요.

레이아웃

사용자는 앱이 보조 콘텐츠나 향상된 컨트롤을 사용하여 사용 가능한 디스플레이 공간을 최대한 활용할 것으로 기대합니다.

적응형 앱은 디스플레이의 변경사항, 특히 앱 창 크기 변경이나 기기 자세 변경에 따라 레이아웃을 최적화합니다.

✓ 권장

창 크기가 변경될 때 UI 구성요소를 변경하여 사용 가능한 디스플레이 공간을 활용합니다. 예를 들어 소형 창 크기에서 사용되는 하단 탐색 메뉴를 중형 및 확장 창에서는 세로 탐색 레일로 바꿉니다. 모든 디스플레이에서 도달할 수 있도록 대화상자를 재배치합니다.

동적 콘텐츠 표시를 위한 목록‑세부정보 및 지원 창과 같은 다중 창 레이아웃을 사용 설정하려면 콘텐츠를 창으로 정리하세요.

✓ 권장: 듀얼 창 레이아웃으로 정리된 활동을 나열하고 세부정보를 표시합니다.
✗ 금지사항

콘텐츠 창을 사용하지 않는 경우 사용 가능한 디스플레이 공간을 채우기 위해 UI 요소를 늘리지 마세요. 긴 텍스트 줄은 읽기 어렵습니다. 늘어난 버튼은 디자인이 좋지 않아 보입니다. Modifier.fillMaxWidth를 사용하는 경우 모든 디스플레이 크기에 적합한 동작이라고 가정하지 마세요.

✗ 잘못된 예: 확장되는 창을 채우기 위해 레이아웃이 늘어납니다.

입력 기기

사용자는 터치 스크린만 사용하여 앱과 상호작용하지 않습니다.

적응형 앱은 외부 키보드, 마우스, 스타일러스를 지원하여 사용자 환경을 개선하고 사용자가 모든 종류의 폼 팩터에서 생산성을 높일 수 있도록 지원합니다.

✓ 권장

키보드 탭 탐색과 마우스 또는 트랙패드 클릭, 선택, 스크롤을 위해 Android 프레임워크의 내장 기능을 활용하세요. 단축키 도우미에 앱의 단축키를 게시합니다.

Jetpack Material 3 라이브러리를 사용하여 사용자가 스타일러스를 사용하여 TextField 구성요소에 쓸 수 있도록 합니다.

✗ 금지사항

대체 입력 방법을 불가능하게 만들지 마세요. 접근성 문제를 도입하지 마세요.

요약

  • Compose 및 Material 3 적응형 라이브러리로 앱 빌드
  • 창 크기 클래스를 기반으로 레이아웃
  • 다중 창 레이아웃 만들기
  • 앱을 크기 조절 가능하게 지정
  • 활동 방향을 잠그지 않음
  • 가로세로 비율 제한 안 함
  • 터치 이외의 입력 지원
  • 지원 중단된 API 피하기

✓ 사용자가 기대하는 대로 하세요. 사용자가 매일 사용하는 다양한 기기에 맞게 앱을 최적화하세요.

✗ 기다리지 마세요. 지금 시작하기