전체 글
-
핵심만 골라 배우는 젯팩 컴포즈 Study 5주차Android 2023. 2. 12. 22:28
Chapter 45~49, 52, 53 Chapter 45 내비게이션 NavHostController 백 스택을 관리하고 현재 목적지가 어떤 컴포저블인지 추적하는 인스턴스. val navController = rememberNavController() NavHost는 액티비티의 사용자 레이아웃에 추가되는 컴포넌트. 사용자가 이동할 목적지의 플레이스 홀더 역할. NavHostController 인스턴스를 전달해야 함. 목적지는 route 형태로 선언됨. 목적지 경로에 인수 전달 가능. NavHost(navController = navController, graph = ) { // 내비게이션 그래프 목적지 composable(route + "/{name}") { backStackEntry -> val nam..
-
핵심만 골라 배우는 젯팩 컴포즈 Study 4주차Android 2023. 2. 8. 19:37
Chapter 37 ~ 41 Chapter 37 AnimateVisibility 진입, 이탈 애니메이션 정의 expandHorizontally() expandVertically() expandIn() fadeIn() fadeOut() scaleIn() scaleOut() shrinkHorizontally() … 애니메이션 조합도 가능 AnimatedVisibility( visible = boxVisible, enter = fadeIn() // + expandHorizontally(), exit = slideOutVertically() ) { ... } AnimationSpec : 애니메이션 유지 시간, 시작 지연, 스프링, 튕김 효과, 반복, 에니메이션 이징(애니메이션 속도 증가 또는 감소) 등 애니메이..
-
핵심만 골라 배우는 젯팩 컴포즈 Study 3주차Android 2023. 1. 28. 20:37
Chapter 27 ~ 36 커스텀 레이아웃 fun Modifier. ( // 선택적 파라미터 ) = layout { measurable, constraints -> // 요소의 위치와 크기를 조정할 코드 } Box, Row, Column 같은 내장 레이아웃 컴포넌트 만으로 대응하기 어려운 레이아웃을 만들어야 할 때 사용. 커스텀 레이아웃 모디파이어는 위의 표준 구문을 이용해 만들 수 있음. 싱글 패스 측정 : 커스텀 레이아웃을 개발 할 때는 모디파이어가 호출될 때마다 자식을 측정하는 규칙이 적용. 사용자 인터페이스 트리 계층을 신속하고 효율적으로 렌더링하기 위해 중요. 변경된 요소만 측정. 컴포즈가 빠른 이유 중 하나. layout 수정자를 이용해 요소가 측정되고 배치되는 방식을 수정 할 수 있음. m..
-
핵심만 골라 배우는 젯팩 컴포즈 Study 2주차Android 2023. 1. 25. 20:56
Chapter 18 ~ 26 컴포즈 개요 컴포즈는 앱 개발에 관한 완전히 새로운 접근 방식. 선언적인 동시에 데이터 주도적. 컴포즈의 선언적 구문 선언한 레이아웃 배치, 제한, 렌더링 방법에 관한 모든 복잡한 세부 사항은 컴포즈가 자동으로 처리. 계층적으로 구조화되어 있기 때문에, 재사용 가능한 서브 뷰를 조합함으로써 복잡한 뷰를 쉽게 만들 수 있음. 명령형 프로그래밍 패러다임 기존의 명령형 패러다임은 트리형태로 뷰를 구성. 레이아웃 위에 텍스트 뷰, 버튼 등을 쌓아 뷰를 그림. UI를 업데이트 하기 위해 일반적으로 findViewById() 같은 함수로 트리를 탐색해 내부 상태를 변경함. xml을 inflating 하여 객체를 만들어 사용, 위젯들은 내부에 각각 상태를 가짐. 상태에 접근할 수 있는 게..
-
핵심만 골라 배우는 젯팩 컴포즈 Study 1주차Android 2023. 1. 25. 20:54
Chapter 1 ~ 9 What is Compose? UI 개발을 간소화하고 간편하게 할 수 있도록 도와주는 툴킷. 기존의 UI는 명령형 방식이었지만, Compose는 선언형 방식. UI가 어떻게 보일지에 대한 구현에서 무엇을 보여주면 되는지에 대한 구현으로 변경. 뷰의 상태만 선언하여 구현 부분은 프레임 워크에게 맡기는 방식. 데이터가 변경되면 프레임 워크가 알아서 해당 함수들을 재호출하여 View를 업데이트. 적은 코드, 유지보수, 재사용 및 확장성 용이. class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setCon..
-
Android) Kotlin Coroutines 1.6에서 도입된 테스트 API 사용해보기Android 2022. 8. 21. 20:42
Kotlin Coroutines 1.6에서 새로 도입된 테스트 API로 기존의 테스트 코드 migration을 진행해보려고 합니다. Build.gradle dependencies { testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_version" // 1.6 } runTest 테스트 코드에서 suspend 함수를 호출하기 위해서는 코루틴 블록 내에서 호출해야 합니다. Coroutines 1.6 이전 버전에서는 runBlockingTest 테스트용 코루틴 빌더를 통해 코루틴이 포함된 테스트를 래핑 하여 사용할 수 있습니다. Coroutines 1.6 버전에서 deprecated 되었고 2022년 내에 완전히 제거될 ..
-
Android) Compose의 ConstraintLayoutAndroid 2022. 6. 1. 19:35
기존의 안드로이드에서 레이아웃의 중첩된 계층 구조의 성능을 개선하기 위해 ConstaintLayout을 사용했습니다. Compose에서는 measure를 한 번만 하기 때문에 ConstraintLayout의 성능상 이점이 필요 없습니다. 다만, 개인적으로 뷰를 짜게 될 때 여전히 ConstraintLayout이 편하다는 생각이 들었습니다. build.gradle 주의 사항으로 Compose의 버전과 Compose-ConstrainLayout의 버전이 다릅니다. implementation "androidx.constraintlayout:constraintlayout-compose:1.0.0-beta02" Compose-ConstrainLayout Compose-ConstratinLayout은 Kotlin ..
-
Android) 안드로이드 12 Splash Screen 대응하기Android 2022. 3. 9. 18:12
Android 12의 변경 사항 중 하나인 Splash Screen Api를 적용하는 방법을 알아보려 합니다. 안드로이드 12 이전의 스플래시 화면 구현 방법은 styles에 windowBackground 속성을 넣고, 스플래시를 보여줄 화면에 테마로 지정하는 방법 액티비티나 프래그먼트에 딜레이를 주어 직접 스플래시 화면을 보여주는 방법 위 방법들로 충분히 스플래시 화면을 구현할 수 있지만, 좀 더 유연함을 주기 위해 안드로이드 12에서 Splash Screen API가 추가되었습니다. 대표적으로 앱이 hot start에 있을 때도 위의 방법들은 다시 스플래시 화면을 보여줌으로써 대기시간이 길어져 사용자에게 불편함을 초래할 수 있습니다. 앱 시작 시간 cold start : 앱이 처음부터 시작. cold..