본문 바로가기

분류 전체보기24

android 아키텍처 패턴 과거 Velog 에서 정리한 아키텍처패턴 글과 MVI글을 수정한 뒤 합쳐서 재작성아키텍처 패턴이란?소프트웨어의 구조를 패턴화한 것안드로이드 아키텍처 패턴의 종류MVC (Model - View - Controller)MVC는 Model, View, Controller로 나뉘는 패턴Model어플리케이션의 데이터를 저장하고 처리View사용자가 보게 될 화면(UI)을 담당ControllerView와 Model을 연결하고 제어사용자의 입력을 처리Android에서는 View와 Controller가 Activity와 Fragment에 포함흐름사용자 → Controller → Model → Controller → View → 사용자장점구현이 단순하고 이해가 쉽다단점View와 Model 간의 의존성이 커서 유지보수가 어.. 2024. 10. 3.
[Android]Kotlin-DSL와 VersionCatalog Kotlin-DSL을 사용한 Android Studio 프로젝트 설정Android Studio에서 Kotlin-DSL을 사용법을 간단히 설명한다.Kotlin-DSL이란?DSL은 Domain Specific Language 로 도메인 특화 언어 라는 뜻이며, Kotlin-DSL은 Kotlin 언어로 작성된 DSL이다.Gradle 스크립트는 Groovy로 작성되지만, Kotlin-DSL을 사용하면 Kotlin 언어로 작성된다.장점코드를 강조할 수 있다.자동완성이 지원된다.오류 코드가 강조된다.변수 리팩토링이 가능한 향상된 편집환경을 지원한다멀티 모듈 사용 시 중복 의존성 선언이 필요가 없다1. 프로젝트 설정1.1. settings.gradle.kts (Kotlin-DSL) vs settings.gradle .. 2024. 10. 1.
[Android]Compose BottomNavigation 만들기 Compose로 BottomNavigationBar 커스터마이징Compose로 BottomNavigation을 만들고 커스텀하는 방법을 정리한다.1. BottomBar에 Compose 연결BottomBar를 선언하기 위해서는 Scaffold를 사용해야 한다.val currentRoute = navController.currentBackStackEntryAsState().value?.destination?.routeScaffold(bottomBar = { if (currentRoute in listOf(route1.route, route2.route)) { BottomNavigationBar(navController) }})아래 코드는 route1, route2일 때만 BottomN.. 2024. 9. 22.
[Android]Compose에서의 ScroolView 및 이슈 LazyColumn 내부에서 LazyVerticalGrid 높이 문제 해결1.상황 설명LazyColumn 내부에 LazyVerticalGrid를 사용했을 때, 높이를 지정하지 않으면 제대로 조정되지 않는 문제 발생.고정된 높이를 줄 수 없는 유동적인 값이 들어갈 때 발생하는 문제.2.문제 코드 예시 LazyColumn( modifier = modifier,) { item { myColumn1() } item { myColumn2() } item { myColumn3() }}3.원인LazyVerticalGrid는 콘텐츠의 높이가 유동적인 경우, 고정된 높이를 설정하지 않으면 레이아웃이 깨질 수 있음.4.해결 방법heightIn으로 LazyVerticalGrid의 최소/최대 높이를.. 2024. 9. 22.
Compose로 Spinner 구현 및 커스텀 방법 Compose에서 Spinner를 구현한 방법Compose에서 XML의 Spinner를 구현하는 방법을 찾고, 그 과정을 정리한다. 아직 커스텀 부분은 익숙하지 않아서 더 알게 되는 부분이 생기면 추가할 예정이다.1. ExposedDropdownMenuBox 설정var expandStatus by remember { mutableStateOf(false) } // Dropdown의 확장 여부 체크val data = stringArrayResource(R.array.data) // Dropdown 확장 시 아이템 목록var selectedOption by remember { mutableStateOf(data[0]) } // 선택된 아이템expandStatus: Dropdown의 확장 여부를 제어한다.da.. 2024. 9. 20.
[Android]Android Rest 통신중 로딩 화면 만들기 Compose 마이그레이션 및 로딩 상태 관리Compose로 마이그레이션하며 기존과는 다른 방법으로 로딩 상태를 관리하는 방법을 시도해 보았다.1. LoadingStateManager 생성전역 로딩 상태를 관리하는 LoadingStateManager를 생성한다.object LoadingStateManager { private val _isLoading = MutableStateFlow(false) val isLoading: StateFlow = _isLoading.asStateFlow() fun isShow(isShow: Boolean) { _isLoading.value = isShow }}MutableStateFlow를 사용하여 로딩 상태를 관리하며, isShow 함수.. 2024. 9. 18.
[Android]HorizontalPager 효과 적용하기 ViewPager2에서 Compose HorizontalPager로 마이그레이션기존 ViewPager2에서 사용했던 효과를 Compose의 HorizontalPager로 최대한 비슷하게 구현했다. 참고한 링크: Medium 글1. 기본 설정HorizontalPager( modifier = Modifier.fillMaxSize(), state = pagerState, contentPadding = PaddingValues(horizontal = 90.dp), pageSpacing = 45.dp)contentPadding: 아이템에 적용할 패딩값 (현재 horizontal 90dp)pageSpacing: 페이지 간 거리 설정 (contentPadding보다 작으면 화면에 보이게 됨)2... 2024. 9. 17.
[Android]Compose 정렬 Compose의 정렬 (Alignment & Arrangement)작업하면서 Compose에서 정렬 기능을 자주 사용하게 되어, 이를 체계적으로 정리할 필요성을 느껴 정리한다. Compose에서는 정렬과 배치를 Alignment와 Arrangement로 구분하여 처리할 수 있다.1. Alignment (정렬)설명: Alignment는 Column, Row, Box에서 자식 View들의 정렬을 지정할 수 있음. Modifier.align()을 통해 세부 정렬 지정 가능.Column 정렬Start: View의 왼쪽 정렬CenterHorizontally: View의 중앙 정렬End: View의 오른쪽 정렬Row 정렬Top: View의 상단 정렬CenterVertically: View의 중앙 정렬Bottom: .. 2024. 9. 17.
[Android]Android Studio 펀치홀/노치 대응 Pixel 7 개발 시 펀치홀 대응법 (Compose)1. 참고 사이트공식 Android 문서 - Insets위 문서를 참고하여 Compose를 중심으로 작성함.2. 기본 사용법상단 Status Bar와 하단 Navigation Bar 인셋 적용 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() setContent { Box(Modifier.safeDrawingPadding()) { } }}효과MainActivity에서 safeDrawingPadding()을 사용하면 상단과 하단 영역에 안전한 인셋을 적용.Status Bar 및 Navig.. 2024. 9. 9.
[Android]accompanist-permissions을 사용한 권한 요청과 GPS를 이용한 위치 추적 마이그레이션 도중 추후를 위해 정리 필요성을 느낌1. gradle 설정gps 를 위한 코드와 permission 체크를 위한 gradle을 설정한다permission 체크는 accompanist-permissions를 이용할 것이다version-catalog를 설정해준다google-location = "21.3.0"accompanist-permissions = "0.36.0"google-location = {module = "com.google.android.gms:play-services-location",version.ref = "google-location"}accompanist-permissions = {module = "com.google.accompanist:accompanist-permiss.. 2024. 9. 9.
반응형