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

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

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

크기 조정 가능 여부

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

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

✓ 권장사항

앱이 멀티 윈도우, 멀티태스킹 시나리오에 참여하도록 하여 사용자 생산성과 만족도를 높입니다.

앱이 24보다 낮은 API 수준을 타겟팅하는 경우 resizeableActivity="true"를 설정합니다. 그 외의 경우에는 신경 쓰지 마세요. Android 7.0 (API 수준 24) 이상에서는 기본적으로 true입니다.

✗ 금지

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

방향

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

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

✓ 권장사항

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

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

✗ 금지

활동 방향을 제한하지 않습니다. 방향을 고정하는 앱은 대형 화면 기기 및 호환되지 않는 창 크기에서 레터박스 처리됩니다.

레터박스 처리된 앱은 태블릿, 폴더블, ChromeOS 기기의 Google Play에서 검색 가능성이 낮아질 수 있습니다.

가로세로 비율

화면과 창 크기가 다르면 가로세로 비율도 달라집니다. 가로세로 비율은 길고 좁은 비율에서 정사각형 비율, 짧고 넓은 비율까지 다양합니다.

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

✓ 권장사항

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

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

✗ 금지

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

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

창 크기

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

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

✓ 권장사항

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

창 크기 클래스를 결정하려면 Compose Material 3 적응형 라이브러리의 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를 설명하는 Column, Row, Box와 같은 Kotlin 기반의 스테이트리스 컴포저블과 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 사용하지 않기

사용자가 기대하는 대로 ✓ 실행: 사용자가 매일 사용하는 다양한 기기에 맞게 앱을 최적화합니다.

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