안드로이드 (62) 썸네일형 리스트형 [안드로이드 Jetpack Compose UI] TabPager 구현하기 안녕하세요. 이번 포스팅에서는 안드로이드 Jetpack Compose에서 TabPager를 구현하겠습니다. TabPager는 상당히 많이 사용되는 UI 중 하나입니다. TabPager를 구현할 때는 ViewPager를 연동해서 사용해야 하는데, 기존 xml 방식으로 UI를 개발할 때는 Adapter 클래스를 생성해야만 했고 연동 과정이 복잡했습니다. 그런데 안드로이드 Compose에서는 이러한 복잡한 과정이 사라졌으며 비교적 간단하게 TabPager를 구현할 수 있습니다. 이제 안드로이드 Jetpack Compose에서 TabPager를 구현하는 방법에 대해 설명하겠습니다. 1. TabPager 만들기 TabPager를 구현하기 위해 먼저 TabRow와 HorizontalPager를 연동하는 작업이 필요.. [안드로이드 Jetpack Compose UI 시리즈] ViewPager 구현하기 안녕하세요. 이번 포스팅에서는 안드로이드 Jetpack Compose에서 ViewPager를 구현하겠습니다. ViewPager는 최근 앱에서 많이 사용되고 있는 대표적인 UI 중 하나입니다. 기존 xml에서는 ViewPager를 구현하기 위해 별도의 Adapter를 생성하고, item에 해당되는 xml도 생성해줘야 했습니다. 그런데 안드로이드 Jetpack Compose에서는 상당히 편하게 구현할 수 있습니다. 이제 안드로이드 Jetpack Compose에서 ViewPager를 구현하겠습니다. 1. ViewPager 만들기 좌우로 넘어가는 ViewPager를 만들기 위해서 androidx.compose.foundation.pager의 HorizontalPager를 사용했습니다. 만약에 위아래로 넘길 수 .. [안드로이드 트러블 슈팅] 서버 데이터 매핑 시, @SerializedName 어노테이션의 중요성 안녕하세요. 안드로이드 개발을 하다 보면 외부 API와의 통신은 필수적인 부분입니다. 이번 포스팅에서는 안드로이드 앱을 개발할 때, Retrofit을 사용하여 데이터를 받아오는 과정에서 JSON 형태의 서버 데이터를 data class를 이용해서 매핑 시, @SerializedName 어노테이션의 중요성에 대해 깨달은 트러블 슈팅 사례를 공유하고자 합니다. 1. 문제 상황 프로젝트를 3~4개월 정도 진행했을 때, 서버 통신 API가 약 30개 추가됐었습니다. 그에 맞춰서 서버 데이터를 매핑하는 DTO 클래스도 많이 생성돼 있었고, API 명세를 보면서 서버에서 반환하는 JSON 필드 이름과 안드로이드의 데이터 클래스 필드 이름을 동일하게 맞추어 개발했었습니다. @SerializedName 어노테이션을 사.. [안드로이드 트러블 슈팅] 빌드 시간 600초에서 30초로 단축한 사례 안녕하세요. 이번 포스팅에서는 안드로이드 빌드 시간을 약 600초에서 30초로 단축하는 데 성공한 트러블 슈팅 사례를 공유하겠습니다. 아래 사진은 안드로이드 스튜디오에서 확인할 수 있는 Build Analyzer입니다. 1. 문제 상황 안드로이드 실무에서 장기 프로젝트를 진행하면서 화면이 50~60개에 이르는 앱을 만들었습니다. 하지만, 프로젝트의 규모에 비례해서 빌드 시간이 점점 증가했고, 결국 약 600초까지 걸리는 상황에 이르렀습니다. 이는 개발자 경험을 크게 저하시켜서 신속한 개발과 문제 해결에 많은 어려움을 겪게 되었습니다. 2. 발생한 문제 프로젝트의 낮은 Gradle 및 코틀린 버전이 이 문제의 주된 원인으로 밝혀졌습니다. 이 프로젝트는 5~6년 전에 생성되었기 때문에 개발 환경 구성 플러그.. [안드로이드 Jetpack Compose Dialog 시리즈] RadioButton Dialog 구현하기 #8 안녕하세요. 이번 포스팅에서는 안드로이드 Jetpack Compose의 RadioButton을 사용해서 RadioButton Dialog를 구현하겠습니다. RadioButton의 특징은 다중 선택이 안되고, 한 가지만 선택할 수 있는 UI입니다. 그래서 일반적으로는 RadioGroup 등을 이용해서 RadioButton의 그룹을 만든 후, 한 가지만 선택되게 구현해 왔습니다. 그런데 Compose의 Material3 RadioButton에서는 RadioGroup은 없습니다. 어떤 형태로 구현할 수 있는지 예제를 통해 확인하겠습니다. 1. RadioButton Dialog 만들기 안드로이드 Compose의 Material3에서 제공하는 RadioButton을 활용해서 만든 RadioButon Dialog입.. [안드로이드 트러블 슈팅] 인앱 다국어 설정 버그 Android 13, Android 14 안녕하세요. 이번 포스팅에서는 안드로이드 개발 실무에서 겪었던 이슈와 해결과정에 대해 적으려고 합니다. 제가 개발 중인 앱은 앱 내에 언어를 설정할 수 있는 기능이 있었습니다. 지원하는 언어는 한국어, 아랍어, 영어로 총 3개였는데 몇 년째 문제가 없다가 최근에 다국어 설정이 제대로 되지 않는다는 연락을 받았습니다. 분석한 결과, 안드로이드 13과 안드로이드 14에서 발생하는 이슈였습니다. 그런데 이상하게도 여러 가지 언어가 섞여서 보인다는 점이었습니다. 예를 들어, 영어로 설정했을 때 한국어와 영어가 섞여서 보이는 현상이 있었습니다. 기나긴 사투 끝에 결국 해결을 했고 그 과정에 대해서 기록하고자 합니다. 1. 안드로이드 인앱 다국어 기능 안드로이드는 다국어를 지원하기 위해서 res 폴더 내에 valu.. [안드로이드 Jetpack Compose Dialog 시리즈] Checkbox Dialog 구현하기 #7 안녕하세요. 이번 포스팅에서는 안드로이드 Jetpack Compose에서 Checkbox를 보여주는 Dialog를 만들겠습니다. Compose의 기본 작동방식에 대해 더 초점이 맞춰져 있기 때문에 체크박스를 어떻게 만들고, 각 체크 상태를 어떤 식으로 처리해야 하는지를 중점적으로 설명하겠습니다. 1. Checkbox Dialog 만들기 Compose Material3에서 제공하는 Checkbox를 사용해서 Dialog를 만들 예정입니다. 웹 개발을 해보신 분들이라면 Checkbox에는 텍스트를 표시하는 label도 필요하다고 생각할 수 있지만, 안드로이드 Compose에서는 Row를 이용해서 Checkbox와 Text를 배치합니다. 아래 코드를 보면 어떤 식으로 label을 표현하는지 확인할 수 있습니다.. [안드로이드 Jetpack Compose Dialog 시리즈] BasicTextField Dialog 구현하기 #6 안녕하세요. 이번 포스팅에서는 안드로이드 Jetpack Compose에서 Text를 입력할 수 있는 BasicTextField를 사용해서 Dialog를 구현하겠습니다. Compose에서는 TextField와 BasicTextField가 있는데 디자인을 커스텀하기 위해서는 BasicTextField를 사용하는 것이 유리하기 때문에 BasicTextField로 Dialog를 만들겠습니다. 1. BasicTextField Dialog 만들기 Compose Material3에서 제공하는 Dialog와 BasicTextField를 사용해서 TextFieldDialog를 만들었습니다. text를 표시하기 위해서 TextState를 관리하는 변수를 만들고, 해당 변수를 BasicTextField의 value와 onV.. 이전 1 2 3 4 5 6 7 8 다음