[Android/Compose] Android Chip 사용법
·
Android/Study
안녕하세요~ 🎵 오늘은 Android에서 Chip을 사용하는 방법을 정리해보려고 합니다앱을 사용하다 보면 아래와 같은 UI를 종종 볼 수 있습니다이러한 요소를 Chip이라고 부릅니다!이번 글에서는 Chip의 정의와 종류 그리고 구현하는 방법까지 다뤄보겠습니다 🧐 ✏️ Chip이란?🔹 Chip의 정의Chip이란 Material Design 시스템에서 제공하는 UI 컴포넌트로태그, 카테고리, 선택지, 액션 등 작은 정보 단위를 시각적으로 표현할 때 사용합니다 📌 Chip을 사용하면 다음과 같은 장점이 있어요:간결한 정보 표현사용자의 입력/선택 유도공간 절약 🔹 Chip의 종류종류설명예시Assist Chip액션을 보조하는 버튼 형태"주소 검색" 버튼Filter Chip다중 선택 가능한 필터관심사 선택..
[Android/Compose] SGIS API로 단계별 주소 선택기 구현하기
·
Android/Study
안녕하세요! 😊 오늘은 통계청에서 제공하는 단게별 주소 조회 API를 사용하여 주소 선택기를 구현하려고 합니다 프로젝트에서 사용자로부터 정확한 주소 입력을 받아야 하는 상황이 있었고 이를 직접 입력 받는 대신단계별로 선택할 수 있게 선택형 UI로 만들면 더 직관적일 것 같아 SGIS API를 사용하게 되었습니다!✏️ SGIS 주소 API 사용 방법🔸 SGIS API 사용 개요SGIS Developers에서 제공하는 공공 API 단계별 주소 조회 API를 사용하였습니다이 API를 통해 시/도 → 시/군/구 → 읍/면/동 단위로 주소 정보를 불러올 수 있습니다💡 초기 설정 및 테스트는 아래 블로그 참고! [Flutter] 공공 API로 주소 검색 & 주소 선택기 만들기 (BLoC)공공 API로 주소..
[Jetpack Compose] Modal Drawer 구현하기
·
Android/Study
이번 글에서는 Modal Drawer에 대해 포스팅 하려고 합니다Drawer는 앱에서 매우 자주 사용하는 UI 요소로 화면의 일부분을 슬라이딩하여 열고 닫을 수 있게 합니다이 Drawer는 Scaffold로 간단하게 구현할 수 있지만!이번에는 top bar와 메뉴 버튼이 별도로 없으며 레이아웃 구성을 자유롭게 하기 위해Material3의 Modal Drawer를 사용하여 직접 구현해보았습니다 😎 ✏️ Modal Drawer 의 기본 개념Modal Drawer는 화면에서 사용자가 화면의 일부분을 슬라이딩하여 열고 닫을 수 있는 UI 요소입니다이 Drawer는 기본적으로 DrawerState를 사용하여 Drawer의 열림/닫힘을 제어합니다 🔹 DrawerState다음과 같이 rememberDrawerSt..
[Jetpack Compose] HorizontalPager로 ViewPager 구현하기
·
Android/Study
이전에 xml로 구현했던 프로젝트를 compose로 리팩토링하게 되었다리팩토링을 진행하면서 이전에 xml로 구현했던 요소들을 compose로 바꾸는게 흥미롭기도 어렵기도 했는데오늘은 그 중에 ViewPager를 Compose에서 어떻게 구현하는지 작성해보려고 한다! 🧐 ✏️ Compose에서 ViewPager 구현하기Compose에서는 기존의 Viewpager 대신에 HorizontalPager와 VerticalPager를 사용한다가로 스크롤 ➡️ HorizontalPager세로 스크롤 ➡️ VerticalPager이번 포스팅에서는 HorizontalPager를 중심으로 다룰 예정이다 ✏️ HorizontalPager 기본 사용법HorizontalPager를 사용하려면 우선 pagerState가 필요하..
[Android/Kotlin] RecyclerView에 ItemDecoration으로 구분선 넣기
·
Android/Study
프로젝트를 진행하면서 RecyclerView에서 아이템 사이에 구분선 넣는 작업을 해봤는데나중에도 유용하게 쓸 것 같아 정리해본다 🤓RecyclerView에서 아이템 사이에 구분선(Divider)을 넣고 싶을 때단순히 View를 추가하는 방법도 있지만 ItemDecoration을 활용하는 방법이 더 깔끔하고 효율적이다이번에는 ItemDecoration을 사용해서 구분선을 추가하는 방법을 알아보자 🚀✏️ 기본 구분선 추가하기🔹 DividerItemDecoration 사용RecyclerView에서 기본적인 구분선을 추가하려면 DividerItemDecoration을 사용하면 된다우선 RecyclerView와 Adapter를 설정해준다나는 Fragment에서 작업했기 때문에 아래와 같이 작성했다recyc..
[Android] RecyclerView와 ViewHolder 패턴 (+ListVIew)
·
Android/Study
동적으로 목록을 생성할 때 사용하는 RecyclerView에 대해 알아보려고 한다종종 면접에서 ListView를 물어보는 경우가 있어서 ListVIew와 차이점에 대해서도 정리해보겠다! 🚀RecyclerView에 대한 근본적인 이해를 하기위해 ListView에 대해 조금 이야기하고 갈 예정이니이번에도 역시 사용법이 바로 궁금한 사람들은 목차를 통해 빠르게 이동하면 된다 😀😀 ✏️ 들어가기 전에간단한 리스트를 구현할 때 다들 한번쯤은 ListView라는걸 써봤을텐데ListView는 데이터를 단순히 화면에 뿌려주는 방식이며 여러가지 성능 문제를 가지고 있다🔸 ListView의 동작 방식각 데이터를 보여줄 레이아웃을 inflate()한다findViewById()로 뷰를 찾아 데이터를 넣어 리스트를 만든..
[Android] SQLite vs Room
·
Android/Study
로컬 저장소는 네트워크와 무관하게 데이터를 저장하는 공간이다대표적으로 SQLite와 Room이 있고 이 두가지 방식의 차이점과 사용법을 정리해보려고 한다 🧐 특정 기능에 대해서만 궁금한 사람들은 목차를 클릭해서 빠르게 확인해보시길!✏️ 로컬 저장소란?들어가기에 앞서 로컬 저장소가 뭔지 헷갈린다면 이해하고 넘어가보자로컬 저장소는 네트워크 서버가 아닌 디바이스에 데이터를 저장하는 공간을 의미한다디바이스에 저장하기 때문에 네트워크 연결 여부와는 관계 없이 사용할 수 있다 ✏️ SQLiteSQLite는 안드로이드에 내장된 데이터베이스로 구조화된 데이터를 저장할 때 사용한다직접 SQL 쿼리를 작성해야하는 번거로움이 있다현재는 Room을 자주 사용하지만 이전에는 SQLite가 기본 옵션이었다!SQL 문법을 사용해..
[Jetpack Compose] Android Navigation 기초
·
Android/Study
화면 간의 이동은 앱을 개발할 때에 핵심적인 내용이기 때문에 Navigation에 대해 다뤄보려고 한다 😇 navigation의 주요 구성 요소인 NavHost, NavController에 대해 알아보자! ✏️ NavHost앱 내에서 경로(화면 간의 이동 구조)를 정의하는 컨테이너 역할NavHost()를 사용한다NavHost(navController = navController, startDestination = "home") { composable("home") { HomeScreen() } composable("details") { DetailsScreen() } } ✏️ NavController화면 이동을 수행하는 핵심 컨트롤러rememberNavContro..
[Jetpack Compose] Scaffold 사용법
·
Android/Study
안드로이드 스튜디오에서 새로운 프로젝트를 생성하면 Scaffold라는 컴포저블이 기본적으로 설정되어 있다class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() setContent { MyApplicationTheme { Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> Greeting( ..
[Jetpack Compose] 위치 권한 요청 및 처리하기
·
Android/Study
오늘은 앱에서 위치 권한을 요청하고 권한 승인 여부에 따라 적절한 동작을 수행하는 코드를 작성해보려고 한다! 아래의 코드를 작동하게 할 예정 🧐 Button(onClick = { if (locationUtils.hasLocationPermission(context)) { // 권한 허용시 locationUtils.requestLocationUpdates(viewModel) } else { // 권한 거부시 requestPermissionLauncher.launch( arrayOf( Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION ) ..