SlideShare a Scribd company logo
1 of 30
Download to read offline
Large screens and foldable
(대화면 기기와 폴더블을 위한 앱 개발)
Kyeongwan Kang,
Android Developer, Woowabros.
GDG Korea Android
86%
Statistic Caption
14%
Statistic Caption
Kyeongwan Kang (강경완)
Android Developer, Woowabros.
GDG Korea Android
86%
Statistic Caption
14%
Statistic Caption
Foldable Device
280M
Large Screen
Android Device today
3%~
Foldable Device today
Large screen and Foldable User
적지 않아요! 폴더블 유저!
Placeholder text. Please replace. A class is
like a blueprint, which contains instructions
for how to create something.
An object instance is an actual Dice that’s
created from the blueprint.
대화면에 대한 감이 오지 않는다면,
아이디어가 필요하다면
50개가 넘는 구글 앱을 참고하세요!
Google Apps
Letterboxed app
앱이 고정된 방향을 가지고 있거나,
(screenOrientation)
앱의 크기를 조절할 수 없거나,
(resizeableActivity)
디스플레이와 가로세로 비율이 호환되지 않는 경우
(min/maxAspectRatio)
레터박스 처리될 수 있음 (Android 12L 이상)
<activity
android:name=".ui.MainActivity"
android:screenOrientation="portrait"
android:resizeableActivity="false” >
</activity>
AndroidManifest.xml
<activity
android:name=".ui.MainActivity"
android:screenOrientation="portrait”
android:resizeableActivity="false" >
</activity>
AndroidManifest.xml
Window Size Classes
Window Size Classes
Window Size Classes
Compact Medium Expanded
Jetpack WindowManager
implementation "androidx.window:window:1.1.0”
implementation "androidx.window:window:1.1.0”
enum class WindowSizeClass {COMPACT,MEDIUM,EXPANDED}
private fun computeWindowSizeClasses() {
val metrics = WindowMetricsCalculator.getOrCreate()
.computeCurrentWindowMetrics(this)
val widthDp = metrics.bounds.width() / resources.displayMetrics.density
val widthWindowSizeClass = when {
widthDp < 600f -> WindowSizeClass.COMPACT
widthDp < 840f -> WindowSizeClass.MEDIUM
else -> WindowSizeClass.EXPANDED
}
// Use widthWindowSizeClass
}
Jetpack WindowManager
implementation "androidx.window:window:1.1.0”
implementation "androidx.compose.material3:material3-window-size-class:1.1.1”
val windowSize = calculateWindowSizeClass(this)
when (windowSize) {
WindowWidthSizeClass.Compact ->
WindowWidthSizeClass.Medium ->
WindowWidthSizeClass.Expanded ->
}
Jetpack WindowManager
Placeholder text. Please replace. A class is
like a blueprint, which contains instructions
for how to create something.
An object instance is an actual Dice that’s
created from the blueprint.
얼마나 Large screen을 잘 지원하고 있는지에 따라
Tier 3, Tier 2, Tier 1 으로 분류함
Tier 1 으로 갈 수록 잘 지원하고 있는 것이며,
각 Tier 별 요구사항을 확인할 수 있음
Large screen app quality
Tier3 (기본) Tier1 (최고)
앱이 대형 화면용으로 설계된
사용자 환경을 제공함
(필요한 경우) 멀티태스킹,
폴더블 상태,
드래그 앤 드롭을 지원함
앱이 대형 화면용으로
설계된 반응형 및 적응형
레이아웃이 있음.
모든 화면 크기 및 기기
구성에 맞게 레이아웃
최적화가 구현됨.
앱이 전체화면으로 실행되지만
이상적이지 않을 수 있음
앱이 레터박스 처리되지 않음
Large screen app quality
Tier3 (기본) Tier2 (우수) Tier1 (최고)
앱이 대형 화면용으로 설계된
사용자 환경을 제공함
(필요한 경우) 멀티태스킹,
폴더블 상태,
드래그 앤 드롭을 지원함
앱이 대형 화면용으로
설계된 반응형 및 적응형
레이아웃이 있음.
모든 화면 크기 및 기기
구성에 맞게 레이아웃
최적화가 구현됨.
앱이 전체화면으로 실행되지만
이상적이지 않을 수 있음
앱이 레터박스 처리되지 않음
Large screen app quality
Session Title Here
Placeholder text. Please replace. Do more with less code and
avoid entire classes of bugs. Code is simpler and easier to
maintain. Placeholder text. Please replace. Do more with less
code and avoid entire classes of bugs. Code is simpler and
easier to maintain.
Activity Embedding
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<property
android:name="android.window.PROPERTY_ACTIVITY_EMBEDDING_SPLITS
_ENABLED"
android:value="true" />
</application>
</manifest>
Open App
Activity Embedding
Detail
Activity
List
Activity
Detail
Activity
Activity Embedding
<SplitPairRule
window:finishPrimaryWithSecondary="never"
window:finishSecondaryWithPrimary="always"
window:splitMinWidthDp="840"
window:splitRatio="0.33">
<SplitPairFilter
window:primaryActivityName=".ListActivity"
window:secondaryActivityName=".DetailActivity" />
</SplitPairRule>
Activity Embedding
A B A C A C
C
Jetpack Compose
ReplyTheme {
val windowSize = calculateWindowSizeClass(this)
val uiState = viewModel.uiState.collectAsState().value
ReplyApp(uiState, windowSize.widthSizeClass)
}
Jetpack Compose
@Composable
fun ReplyApp(.., windowSize: WindowWidthSizeClass,) {
…
when (windowSize) {
WindowWidthSizeClass.Compact -> …
WindowWidthSizeClass.Medium -> …
WindowWidthSizeClass.Expanded. -> …
}
}
Jetpack Compose
when (windowSize) {
WindowWidthSizeClass.Compact -> {
navigationType = BOTTOM_NAVIGATION
contentType = LIST_ONLY }
WindowWidthSizeClass.Medium -> {
navigationType = NAVIGATION_RAIL
contentType = LIST_AND_DETAIL }
WindowWidthSizeClass.Expanded. -> {
navigationType = PERMANENT_NAVIGATION_DRAWER
contentType =LIST_AND_DETAIL }
}
}
Tier2 (우수)
Tier3 (기본) Tier1 (최고)
앱이 대형 화면용으로 설계된
사용자 환경을 제공함
(필요한 경우) 멀티태스킹,
폴더블 상태,
드래그 앤 드롭을 지원함
앱이 대형 화면용으로
설계된 반응형 및 적응형
레이아웃이 있음.
모든 화면 크기 및 기기
구성에 맞게 레이아웃
최적화가 구현됨.
앱이 전체화면으로 실행되지만
이상적이지 않을 수 있음
앱이 레터박스 처리되지 않음
Large screen app quality
Large Screen App Quality Guideline
https://developer.android.com/docs/quality-guidelines/large-screen-app-quality
Resources
Activity Embedding Guide
https://developer.android.com/guide/topics/large-screens/activity-embedding
Activity Embedding Codelab
https://developer.android.com/codelabs/large-screens/activity-embedding
Jetpack Compose Adaptability Codelab
https://codelabs.developers.google.com/jetpack-compose-adaptability
Support Different Screen Size Guide
https://developer.android.com/guide/topics/large-screens/support-different-screen-sizes
Thank you

More Related Content

What's hot

Introduction to React
Introduction to ReactIntroduction to React
Introduction to ReactRob Quick
 
Building rich domain models with ddd and tdd ivan paulovich - betsson
Building rich domain models with ddd and tdd   ivan paulovich - betssonBuilding rich domain models with ddd and tdd   ivan paulovich - betsson
Building rich domain models with ddd and tdd ivan paulovich - betssonIvan Paulovich
 
Jetpack Compose.pptx
Jetpack Compose.pptxJetpack Compose.pptx
Jetpack Compose.pptxGDSCVJTI
 
introduction to Vue.js 3
introduction to Vue.js 3 introduction to Vue.js 3
introduction to Vue.js 3 ArezooKmn
 
Building RESTful applications using Spring MVC
Building RESTful applications using Spring MVCBuilding RESTful applications using Spring MVC
Building RESTful applications using Spring MVCIndicThreads
 
Angular - Chapter 4 - Data and Event Handling
 Angular - Chapter 4 - Data and Event Handling Angular - Chapter 4 - Data and Event Handling
Angular - Chapter 4 - Data and Event HandlingWebStackAcademy
 
React js - The Core Concepts
React js - The Core ConceptsReact js - The Core Concepts
React js - The Core ConceptsDivyang Bhambhani
 
Solid principles, Design Patterns, and Domain Driven Design
Solid principles, Design Patterns, and Domain Driven DesignSolid principles, Design Patterns, and Domain Driven Design
Solid principles, Design Patterns, and Domain Driven DesignIrwansyah Irwansyah
 
Clean architecture - Protecting the Domain
Clean architecture - Protecting the DomainClean architecture - Protecting the Domain
Clean architecture - Protecting the DomainVictor Rentea
 
Angular - Chapter 5 - Directives
 Angular - Chapter 5 - Directives Angular - Chapter 5 - Directives
Angular - Chapter 5 - DirectivesWebStackAcademy
 
What Is Virtual DOM In React JS.pptx
What Is Virtual DOM In React JS.pptxWhat Is Virtual DOM In React JS.pptx
What Is Virtual DOM In React JS.pptxAkrati Rawat
 
Choosing The Best Mobile App Framework
Choosing The Best Mobile App FrameworkChoosing The Best Mobile App Framework
Choosing The Best Mobile App FrameworkBrandon Minnick, MBA
 
YAGNI Principle and Clean Code
YAGNI Principle and Clean CodeYAGNI Principle and Clean Code
YAGNI Principle and Clean CodeLuan Reffatti
 

What's hot (20)

Introduction to React
Introduction to ReactIntroduction to React
Introduction to React
 
spring-api-rest.pdf
spring-api-rest.pdfspring-api-rest.pdf
spring-api-rest.pdf
 
Spring ppt
Spring pptSpring ppt
Spring ppt
 
Building rich domain models with ddd and tdd ivan paulovich - betsson
Building rich domain models with ddd and tdd   ivan paulovich - betssonBuilding rich domain models with ddd and tdd   ivan paulovich - betsson
Building rich domain models with ddd and tdd ivan paulovich - betsson
 
ReactJS
ReactJSReactJS
ReactJS
 
Jetpack Compose.pptx
Jetpack Compose.pptxJetpack Compose.pptx
Jetpack Compose.pptx
 
introduction to Vue.js 3
introduction to Vue.js 3 introduction to Vue.js 3
introduction to Vue.js 3
 
Building RESTful applications using Spring MVC
Building RESTful applications using Spring MVCBuilding RESTful applications using Spring MVC
Building RESTful applications using Spring MVC
 
Training On Angular Js
Training On Angular JsTraining On Angular Js
Training On Angular Js
 
Angular - Chapter 4 - Data and Event Handling
 Angular - Chapter 4 - Data and Event Handling Angular - Chapter 4 - Data and Event Handling
Angular - Chapter 4 - Data and Event Handling
 
React js - The Core Concepts
React js - The Core ConceptsReact js - The Core Concepts
React js - The Core Concepts
 
Solid principles, Design Patterns, and Domain Driven Design
Solid principles, Design Patterns, and Domain Driven DesignSolid principles, Design Patterns, and Domain Driven Design
Solid principles, Design Patterns, and Domain Driven Design
 
React js
React jsReact js
React js
 
Clean architecture - Protecting the Domain
Clean architecture - Protecting the DomainClean architecture - Protecting the Domain
Clean architecture - Protecting the Domain
 
AngularJS
AngularJS AngularJS
AngularJS
 
Angular - Chapter 5 - Directives
 Angular - Chapter 5 - Directives Angular - Chapter 5 - Directives
Angular - Chapter 5 - Directives
 
What Is Virtual DOM In React JS.pptx
What Is Virtual DOM In React JS.pptxWhat Is Virtual DOM In React JS.pptx
What Is Virtual DOM In React JS.pptx
 
Choosing The Best Mobile App Framework
Choosing The Best Mobile App FrameworkChoosing The Best Mobile App Framework
Choosing The Best Mobile App Framework
 
YAGNI Principle and Clean Code
YAGNI Principle and Clean CodeYAGNI Principle and Clean Code
YAGNI Principle and Clean Code
 
Second Level Cache in JPA Explained
Second Level Cache in JPA ExplainedSecond Level Cache in JPA Explained
Second Level Cache in JPA Explained
 

Similar to 대화면 기기와 폴더블을 위한 앱 개발 (인공지능위크 2023)

메타버스 서비스에 Android 개발자가 할 일이 있나요?
메타버스 서비스에 Android 개발자가 할 일이 있나요?메타버스 서비스에 Android 개발자가 할 일이 있나요?
메타버스 서비스에 Android 개발자가 할 일이 있나요?Myungwook Ahn
 
200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수
200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수
200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수NAVER Engineering
 
100만 달러짜리 빠른앱 만드는 비법
100만 달러짜리 빠른앱 만드는 비법100만 달러짜리 빠른앱 만드는 비법
100만 달러짜리 빠른앱 만드는 비법SooHwan Ok
 
1.openseminar
1.openseminar1.openseminar
1.openseminarNAVER D2
 
[DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjs
[DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjs[DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjs
[DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjsJae Sung Park
 
Xamarin android
Xamarin androidXamarin android
Xamarin androidHyungKuIm
 
[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔NAVER D2
 
프로그레시브 웹앱(Pwa)
프로그레시브 웹앱(Pwa)프로그레시브 웹앱(Pwa)
프로그레시브 웹앱(Pwa)Woncheol Lee
 
2018 GDG 인천 DevFest GoogleAndroidDevSummit
2018 GDG 인천 DevFest GoogleAndroidDevSummit2018 GDG 인천 DevFest GoogleAndroidDevSummit
2018 GDG 인천 DevFest GoogleAndroidDevSummitVeronika Bae
 
Agaods 플랫폼 사업 소개
Agaods 플랫폼 사업 소개Agaods 플랫폼 사업 소개
Agaods 플랫폼 사업 소개Yongkyoo Park
 
Flutter로 글로벌앱 출시를 위한 꿀팁 - Droidknights2020
Flutter로 글로벌앱 출시를 위한 꿀팁 - Droidknights2020Flutter로 글로벌앱 출시를 위한 꿀팁 - Droidknights2020
Flutter로 글로벌앱 출시를 위한 꿀팁 - Droidknights2020Bansook Nam
 
Web app 개발 방법론
Web app 개발 방법론Web app 개발 방법론
Web app 개발 방법론Sang Seok Lim
 
Web devmobile 8회열린세미나
Web devmobile 8회열린세미나Web devmobile 8회열린세미나
Web devmobile 8회열린세미나Pumsuk Cho
 
How to implement your dream 20150427
How to implement your dream 20150427How to implement your dream 20150427
How to implement your dream 20150427Will Kim
 
질병관리본부 특강 - 모바일 “고해상도 디스플레이” 시대를 준비하다
질병관리본부 특강 - 모바일 “고해상도 디스플레이”  시대를 준비하다질병관리본부 특강 - 모바일 “고해상도 디스플레이”  시대를 준비하다
질병관리본부 특강 - 모바일 “고해상도 디스플레이” 시대를 준비하다yamoo9
 
AGADOS 지능형 앱 엔진 플랫폼 소개
AGADOS 지능형 앱 엔진 플랫폼 소개AGADOS 지능형 앱 엔진 플랫폼 소개
AGADOS 지능형 앱 엔진 플랫폼 소개Yongkyoo Park
 
반응형 웹 디자인은 만능인가? - 신현석
반응형 웹 디자인은 만능인가? - 신현석반응형 웹 디자인은 만능인가? - 신현석
반응형 웹 디자인은 만능인가? - 신현석Daum DNA
 
OS vi : Smart Pad UI Design (2011 Graduation Project)
OS vi : Smart Pad UI Design (2011 Graduation Project)OS vi : Smart Pad UI Design (2011 Graduation Project)
OS vi : Smart Pad UI Design (2011 Graduation Project)Wooseok Jeon
 

Similar to 대화면 기기와 폴더블을 위한 앱 개발 (인공지능위크 2023) (20)

메타버스 서비스에 Android 개발자가 할 일이 있나요?
메타버스 서비스에 Android 개발자가 할 일이 있나요?메타버스 서비스에 Android 개발자가 할 일이 있나요?
메타버스 서비스에 Android 개발자가 할 일이 있나요?
 
200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수
200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수
200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수
 
100만 달러짜리 빠른앱 만드는 비법
100만 달러짜리 빠른앱 만드는 비법100만 달러짜리 빠른앱 만드는 비법
100만 달러짜리 빠른앱 만드는 비법
 
1.openseminar
1.openseminar1.openseminar
1.openseminar
 
[DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjs
[DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjs[DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjs
[DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjs
 
Xamarin android
Xamarin androidXamarin android
Xamarin android
 
[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔
 
프로그레시브 웹앱(Pwa)
프로그레시브 웹앱(Pwa)프로그레시브 웹앱(Pwa)
프로그레시브 웹앱(Pwa)
 
모바일환경과 개발방향
모바일환경과 개발방향 모바일환경과 개발방향
모바일환경과 개발방향
 
2018 GDG 인천 DevFest GoogleAndroidDevSummit
2018 GDG 인천 DevFest GoogleAndroidDevSummit2018 GDG 인천 DevFest GoogleAndroidDevSummit
2018 GDG 인천 DevFest GoogleAndroidDevSummit
 
Agaods 플랫폼 사업 소개
Agaods 플랫폼 사업 소개Agaods 플랫폼 사업 소개
Agaods 플랫폼 사업 소개
 
Flutter로 글로벌앱 출시를 위한 꿀팁 - Droidknights2020
Flutter로 글로벌앱 출시를 위한 꿀팁 - Droidknights2020Flutter로 글로벌앱 출시를 위한 꿀팁 - Droidknights2020
Flutter로 글로벌앱 출시를 위한 꿀팁 - Droidknights2020
 
Web app 개발 방법론
Web app 개발 방법론Web app 개발 방법론
Web app 개발 방법론
 
Web devmobile 8회열린세미나
Web devmobile 8회열린세미나Web devmobile 8회열린세미나
Web devmobile 8회열린세미나
 
How to implement your dream 20150427
How to implement your dream 20150427How to implement your dream 20150427
How to implement your dream 20150427
 
질병관리본부 특강 - 모바일 “고해상도 디스플레이” 시대를 준비하다
질병관리본부 특강 - 모바일 “고해상도 디스플레이”  시대를 준비하다질병관리본부 특강 - 모바일 “고해상도 디스플레이”  시대를 준비하다
질병관리본부 특강 - 모바일 “고해상도 디스플레이” 시대를 준비하다
 
Designing Apps for Motorla Xoom Tablet
Designing Apps for Motorla Xoom TabletDesigning Apps for Motorla Xoom Tablet
Designing Apps for Motorla Xoom Tablet
 
AGADOS 지능형 앱 엔진 플랫폼 소개
AGADOS 지능형 앱 엔진 플랫폼 소개AGADOS 지능형 앱 엔진 플랫폼 소개
AGADOS 지능형 앱 엔진 플랫폼 소개
 
반응형 웹 디자인은 만능인가? - 신현석
반응형 웹 디자인은 만능인가? - 신현석반응형 웹 디자인은 만능인가? - 신현석
반응형 웹 디자인은 만능인가? - 신현석
 
OS vi : Smart Pad UI Design (2011 Graduation Project)
OS vi : Smart Pad UI Design (2011 Graduation Project)OS vi : Smart Pad UI Design (2011 Graduation Project)
OS vi : Smart Pad UI Design (2011 Graduation Project)
 

대화면 기기와 폴더블을 위한 앱 개발 (인공지능위크 2023)