Large Screen 기기가 늘어나는 추세 (5억 대 이상) Link: h"ps://developer.android.com/develop#devices • Google I/O ’25 "미국의 6대 주요 스트리밍 앱을 조사한 결과, 태블릿과 스마트폰을 함께 사용하는 유저들 은 스마트폰만 사용하는 유저들에 비해 이용 시간이 3배 더 길었다"
모니터링 및 개선 > 도달범위 및 기기 개요 > 폼 팩터 > 살펴보기 > 시간 경과에 따른 사용자와 문제 분포 > 설치한 사용자 수 • 글로벌웹툰의 1년 전과 현재를 비교해보면: • 전화 사용자 수 1.5% 증가 • 태블릿 사용자 수 33% 증가 • 태블릿 사용자 수가 늘고 있다? Google Play Console에서 폼 팩터마다 시간 경과에 따른 사용자 수를 확인할 수 있다
모니터링 및 개선 > 도달범위 및 기기 개요 > 폼 팩터 > 살펴보기 > 시간 경과에 따른 사용자와 문제 분포 > 설치한 사용자 수 • 글로벌웹툰의 1년 전과 현재를 비교해보면: • 전화 사용자 수 1.5% 증가 • 태블릿 사용자 수 33% 증가 • 태블릿 사용자 수가 늘고 있다? • 카운터포인트리서치 “2025년 2분기 전세계 폴더블 스마트폰 시장, 전년 동기 대비 45% 성장” • 폴더블 사용자 수가 늘고 있다 Google Play Console에서 폼 팩터마다 시간 경과에 따른 사용자 수를 확인할 수 있다 Link: h"ps://korea.counterpointresearch.com/global-foldable-sma#phone-market-q2-2025/
Dashboard > 비교 적용 (모바일 트래픽, 태블릿 트래픽) • 활성 사용자당 평균 참여 시간 (모바일 우세) • 활성 사용자당 참여 세션수 (모바일 우세) • 세션당 평균 참여 시간 (태블릿 우세) Firebase Analytics에서 태블릿과 스마트폰 사용자 그룹을 나누어 앱 이용 시간을 비교할 수 있다
Dashboard > 비교 적용 • 활성 사용자당 평균 참여 시간 • 활성 사용자당 참여 세션수 • 세션당 평균 참여 시간 • 모바일보다 태블릿에서의 수치가 크게 낮다면 Large Screen 기기에서의 사용성이 떨어지는 것일 수 있다 Firebase Analytics에서 태블릿과 스마트폰 사용자 그룹을 나누어 앱 이용 시간을 비교할 수 있다
API는 전체 화면 및 멀티 윈도우 모드의 대형 화면 기기에서 무시됩니다 • android:resizeableActivity="false" • android:screenOrientation="portrait" • android:minAspectRatio="2" • android:maxAspectRatio="3" • Activity#setRequestedOrientation(int) • Activity#getRequestedOrientation() 방향, 크기 조절 가능 여부, 가로세로 비율 제한 무시 (최소 너비가 600dp 이상) Link: h"ps://developer.android.com/about/versions/16/behavior-changes-16#adaptive-layouts
화면 지원 • TIER 2 (우수) - 대형 화면 최적화 • TIER 1 (최고) - 대형 화면 차별화 앱이 기기 폼 팩터나 화면 크기, 디스플레이 모드, 상태와 관계없이 우수한 사용자 환경을 제공하려면 대형 화면 호환성 체크리스트 및 테스트를 완료하세요 Link: h"ps://developer.android.com/docs/quality-guidelines/large-screen-app-quality
요구사항을 충족해야 합니다 • 앱이 사용 가능한 디스플레이 영역(전체 화면 또는 멀티 윈도우 모드에서는 앱 창)을 채웁니다 앱이 레터박스 처리되지 않으며 호환성 모드로 실행되지 않습니다 • 기기가 분할 화면 및 데스크톱 창 모드에서 기기 회전, 접기 및 펼치기, 창 크기 조절과 같은 구성 변경을 거칠 때 앱이 구성 변경을 처리하고 상태를 유지하거나 복원합니다 • 앱이 멀티 윈도우 모드에서 완전하게 작동합니다 • 앱이 가로 모드 방향과 세로 모드 방향, 접힌 기기 상태와 펼쳐진 기기 상태, 멀티 윈도우 모드에서 카메라 미리보기 및 미디어 프로젝션을 제공합니다 • 키보드, 마우스, 트랙패드, 스타일러스를 지원합니다 사용자가 중요한 작업 흐름을 완료할 수 있지만 최적의 사용자 환경은 제공되지 않습니다 Link: h"ps://developer.android.com/docs/quality-guidelines/large-screen-app-quality
• AAC ViewModel 사용 • 저장된 인스턴스 상태 • 영구 스토리지 • Activity 재생성 제한 • android:configChanges 추가 • onConfigurationChanged 직접 처리 앱 사용자는 상태가 보존되기를 기대한다 Link: h"ps://developer.android.com/guide/topics/resources/runtime-changes
• Multi-resume • Window metrics • 지원중단된 Display API 교체 • getSize() • getMetrics() • getRealSize() • getRealMetrics() • WindowManager 또는 WindowMetrics 사용 앱이 멀티 윈도우 모드에서 완전하게 작동해야 한다 Link: h"ps://developer.android.com/develop/ui/compose/layouts/adaptive/suppo#-multi-window-mode
설계된 반응형 및 적응형 레이아웃이 있습니다 모든 레이아웃이 반응형입니다 적응형 레이아웃의 구현은 창 크기 클래스에 따라 결정됩니다 • 모달과 옵션 메뉴, 기타 보조 요소는 모든 화면 유형과 기기 상태에서 올바른 형식으로 지정됩니다 (하단 시트/버튼/텍스트 필드의 최대 너비 제한, 탐색 메뉴를 탐색 레일로 대체 등) • 터치 영역은 최소 48dp • 커스텀 드로어블에 포커스 상태를 지원합니다 • 키보드, 마우스, 트랙패드에 관한 고급 기능을 제공합니다 (화살표 키 탐색, 단축키, 미디어 제어, 오른쪽 버튼 클릭, 스크롤, 마우스 오버 상태 지원 등) 앱이 모든 화면 크기 및 기기 구성에 맞게 레이아웃 최적화를 구현하며 외부 입력 장치에 관한 고급 지원을 제공합니다 Link: h"ps://developer.android.com/docs/quality-guidelines/large-screen-app-quality
Link: h"ps://developer.android.com/develop/ui/views/layout/responsive-adaptive-design-with-views#alternative_layout_resources 다양한 화면 크기에 따라 최적화된 대체 레이아웃을 제공한다
한정자 (기기의 현재 방향에 관계없이 동일) res/layout-sw600dp/ • 사용 가능한 너비 한정자 (기기 방향에 따라 변경될 수 있음) res/layout-w600dp/ 다양한 화면 크기에 따라 최적화된 대체 레이아웃을 제공한다 w sw Link: h"ps://developer.android.com/develop/ui/views/layout/responsive-adaptive-design-with-views#alternative_layout_resources
약 9mm의 실제 크기를 갖는다 • 터치스크린 요소에 권장되는 타겟 크기는 7~10mm • 디자인 가이드에는 터치 영역이 고려되지 않는 경우가 종종 있다 • 개발자가 임의로 영역을 넓혀서 적용한다 터치 영역은 최소 48 x 48 dp로 설정해야 한다 Link: h"ps://material.io/design/usability/accessibility.html#layout-and-typography
권장! • 블로그 글 "Jetpack Compose: Touch Target" https://medium.com/@fornewid/jetpack-compose-touch-target-6cc2ca2e4b3b 터치 영역은 최소 48 x 48 dp로 설정해야 한다 Link: h"ps://developer.android.com/develop/ui/views/touch-and-input/gestures/viewgroup#delegate
경우에는 자동 적용된다 • Custom Drawable을 사용하는 경우에는? 사용자가 상호작용할 수 있는 요소는 기기가 터치 모드가 아닐 때 포커스 가능해야 한다 <View android:foreground="?selectableItemBackground" /> <style name="MyAppTheme" parent="Theme.AppCompat.NoActionBar"> <item name="android:colorControlHighlight">#66666666</item> <style> Link: h"ps://developer.android.com/training/material/animations#Touch
자동 적용 • Jetpack Compose 권장! • View는 Hover 이펙트를 기본 지원하지 않는다. • ex) 마우스, 스타일러스 등 사용자가 상호작용할 수 있는 요소는 기기가 터치 모드가 아닐 때 포커스 가능해야 한다 Link: h"ps://developer.android.com/develop/ui/compose/touch-input/focus/change-focus-behavior
시나리오를 지원합니다 (PIP 모드, 멀티 윈도우 모드, 첨부파일 등) • 앱이 별도의 창에서 여러 자체 인스턴스를 실행할 수 있습니다 • 앱이 모든 폴더블 상태 및 관련 사용 사례를 지원합니다 • 앱이 터치 입력, 마우스, 트랙패드, 스타일러스를 사용하여 앱 내에서 뷰 간에 그리고 멀티 윈도우 모드에서 다른 앱 간에 드래그 앤 드롭을 지원합니다 • 키보드, 마우스, 트랙패드에 관한 고급 기능을 제공합니다 • 앱이 스타일러스로 그리기 및 쓰기를 지원합니다 • 앱이 맞춤설정된 커서를 표시하여 사용자가 UI 요소 및 콘텐츠와 상호작용할 수 있는 방법을 나타냅니다 앱이 태블릿, 폴더블, ChromeOS 기기용으로 설계된 사용자 환경을 제공합니다 Link: h"ps://developer.android.com/docs/quality-guidelines/large-screen-app-quality
품질 기준을 충족하지 못하는 앱과 게임에 대해 앱 목록 경고와 노출 수가 감소합니다 • 이 휴대폰 기술 품질 요건을 대형 화면까지 확대하며, 사용자 기기에서 사용자가 인지하는 비정상 종료율 또는 ANR(응답 지연)율이 8% 이상인 앱과 게임에 적용됩니다 대형 화면 앱 품질 가이드라인을 준수하는 앱과 게임은 검색 및 앱 및 게임 홈에서 더 높은 순위를 차지합니다 Link: h"ps://android-developers.googleblog.com/2023/07/introducing-new-play-store-for-large-screens.html
600dp • Medium: 600dp ≤ w < 840dp • Expanded: 840dp ≤ w • Height Breakpoints • Compact: h < 480dp • Medium: 480dp ≤ h < 900dp • Expanded: h ≥ 900dp • Jetpack Compose 권장! 동적으로 다르게 처리할 때는 창 크기 클래스 중단점을 이용한다 Link: h"ps://developer.android.com/develop/ui/views/layout/use-window-size-classes
= WindowMetricsCalculator.getOrCreate().computeCurrentWindowMetrics(this) val width = metrics.bounds.width() val height = metrics.bounds.height() val density = resources.displayMetrics.density val windowSizeClass = WindowSizeClass.compute(width/density, height/density) // COMPACT, MEDIUM, or EXPANDED val widthWindowSizeClass = windowSizeClass.windowWidthSizeClass // COMPACT, MEDIUM, or EXPANDED val heightWindowSizeClass = windowSizeClass.windowHeightSizeClass // Use widthWindowSizeClass and heightWindowSizeClass. } Link: h"ps://developer.android.com/develop/ui/compose/layouts/adaptive/use-window-size-classes
서비스 관점에서는 리소스가 많이 든다 • 디자인: 화면마다 디자인 배치가 달라지는 가이드를 여러벌 만들어야 한다 • 개발: 레이아웃을 여러벌 구현하고, 구성 변경 시마다 교체해야 한다 • QA: 화면 크기마다 동작을 테스트 해야 한다 다양한 화면 크기에 따라 최적화된 대체 레이아웃을 제공한다
서비스 관점에서는 리소스가 많이 든다 • 디자인: 화면마다 디자인 배치가 달라지는 가이드를 여러벌 만들어야 한다 • 개발: 레이아웃을 여러벌 구현하고, 구성 변경 시마다 교체해야 한다 • QA: 화면 크기마다 동작을 테스트 해야 한다 • 주요 화면 일부에만 적용하는 것이 현실적이다 • 또는 디자인 시스템 컴포넌트에만 적용하게 된다 (ex. Bottom Sheet) • 대부분은 반응형 레이아웃으로 적용하게 된다 다양한 화면 크기에 따라 최적화된 대체 레이아웃을 제공한다
그런데 화면 너비에 적절한 spanCount를 계산하는데, 화면 너비를 직접 측정해야만 할까? View보다 훨씬 간단하다 BoxWithConstraints { // Use maxWidth or maxHeight } Link: h"ps://developer.android.com/develop/ui/compose/layouts/basics#constraints
가득 채우면 크게 확대되는 문제가 있다 • 각 페이지의 크기를 고정해야 한다 • ViewPager, ViewPager2 에는 기능이 없다 • Jetpack Compose 권장! • PageSize.Fixed(358.dp) • 반대로 너비가 좁은 상황에서는 잘린다 가로 또는 세로로 한 페이지씩만 넘어가는 컴포넌트 Link: h"ps://developer.android.com/develop/ui/compose/layouts/pager#custom-page
기기에서 서비스를 잘 이용할 수 있도록 개선한다 App UI System UI Drag & Drop Link: h"ps://developer.android.com/develop/ui/compose/layouts/adaptive/suppo#-multi-window-mode#multi-instance
Bar (WindowInsets) 큰 화면 기기에서 서비스를 잘 이용할 수 있도록 개선한다 CaptionBar Link: h"ps://developer.android.com/develop/ui/compose/layouts/adaptive/suppo#-desktop-windowing
Bar • 접근성 • 외부 입력 장치와의 상호작용 개선 • 방향키 탐색 • 키보드 단축키 지원 • 마우스 포인터 아이콘 • 스타일러스 입력 큰 화면 기기에서 서비스를 잘 이용할 수 있도록 개선한다 Link: h"ps://developer.android.com/develop/ui/compose/layouts/adaptive/suppo#-desktop-windowing
Firebase Analytics 대형 화면 대응은 선택이 아닌 필수. Android 16 동작 확인 • 방향, 크기 조절 가능 여부, 가로세로 비율 제한 무시 대형 화면 앱 품질 검토 • TIER 3, 2, 1 • UX, 외부 입력 장치 글로벌웹툰 레이아웃 개선 • 최대 너비 제한 • 최적화된 레이아웃으로 표시 Jetpack Compose 권장 • Window Size Classes • UI/UX, 접근성 Next Step • List-Detail 패턴 • 데스크톱 창 모드