본문 바로가기

ANDROID

(125)
[안드로이드] include 태그를 사용하고 있다면? merge 태그로 레이아웃 계층 줄이기 이 포스트는 레이아웃에 관해 다루기 때문에 UI/UX 카테고리에 넣어야 하나도 싶지만, 결론적으로 앱의 성능을 높이기 위한 레이아웃 최적화 작업이기 때문에 Performace 카테고리로 옮기기로 했다. 우선 첫번째로 안드로이드에서 뷰의 계층이 성능이 어떻게 영향을 주는지에 대해서 더 제대로 이해를 해 보고 싶었다. 상기 내용에 대해서 안드로이드 개발자 문서에서는 아래 정도의 내용으로 레이아웃 계층 문제를 설명하고 있다. 모든 뷰는 레이아웃(동사) 및 측정단계를 거쳐 렌더링 된다. 레이아웃 및 측정단계에서 측정 단계는 View 객체의 크기와 경계를 결정하고, 레이아웃 단계는 이 객체를 배치할 위치를 결정. 뷰가 setText 등의 작업에 의해 사이즈를 조절해야 하는 경우 다시 이 레이아웃 및 측정단계를 거..
[Dagger2] 헷갈리는 DI 어노테이션 및 개념 정리 Dagger2를 사용한 DI를 반영하는 중에 헷갈리고 어려움을 겪는 부분을 최소하 하고자 내용을 좀 정리해두기로 했다. 어노테이션들에 대한 이해와 컴포넌트와 모듈간의 의존성 주입이 어떻게 이루어지는지가 이해되어야 원하는대로 의존성 주입을 수행함은 물론 컴파일 에러 지옥에서 빠져나올 수 있을 것이다. 0. 기본개념 Dagger2는 의존성 주입을 위해 개발된 라이브러리이다. 높은 러닝 커브를 자랑하지만, Hilt나 Koin에 앞서 광범위하게 사용되고 있는 DI 라이브러리로 알고 있다. 작동하기 위한 핵심 요소들만 살펴보면 의존성 주입을 위해서는 아래 요소가 구성되어야 한다. 제공하고자 하는 객체와 메소드 > 객체와 메소드의 의존성을 제공하는 모듈 > 모듈이 제공하는 의존성을 프로젝트에 제공하는 컴포넌트 이들..
[안드로이드] 구글이 소개하는 메모리 최적화 기법들을 리뷰해보자 안드로이드 개념 공부를 하던 중에 앱 메모리 관리라는 페이지를 찾게 되었는데, 상당히 유용한 정보들과 어떠한 기술들이 실질적으로 어떤 이점을 가져다주는지 등에 대한 내용들이 있어 포스팅에 좋을 것 같다고 생각했다. 공식 문서가 소개하는 내용들 중 핵심적으로 정리하고자 하는 내용들을 써보고자 한다. 1. onTrimMemory callback의 활용 import android.content.ComponentCallbacks2 // Other import statements ... class MainActivity : AppCompatActivity(), ComponentCallbacks2 { // Other activity code ... /** * Release memory when the UI beco..
[Room] Room DB 및 Firebase RDB와의 Transaction 최적화하기 기존에 개발하던 서비스의 고질적인 문제는 다량의 데이터와의 상호작용시 시간이 상당히 오래 걸린다는 것이었다. Firebase RDB와의 통신에서의 속도 저하에 이어 Firebase RDB로부터 로드한 데이터를 Room에 집어넣는 과정에서의 2차 속도저하가 있었기 때문이었다. 하지만 여차저차 그동안의 서비스를 유지할 수 있던 점은, 다량의 데이터를 Query할 UI/UX가 없었기 때문이었다. 이제 신규 개발안에 따라 결론적으로 '진작에' 해결됬어야 할 문제와 일기토를 해야 될 상황에 이르렀다. 우선 기존의 로직 구조를 먼저 설명하고자 한다. Before Firebase RDB에서 타겟으로 하는 테이블의 Data를 addValueEventListener를 통해 요청한다. 요청을 통해 들어온 DataSnaps..
[안드로이드] activityViewModels를 활용해 Activity와 Fragment끼리 ViewModel 공유하기 구글 Material Design Component를 다루는 토이 프로젝트에서 BottomNavigationView를 다루는 Activity가 있었는데, 여기에서 각 탭을 선택할 때 보여지는 Fragment 내에 존재하는 버튼을 눌렀을 때, Activity의 뷰에 들어가 있는 BottomNavigationView의 뱃지를 업데이트 하고 싶었다. 이를 구현하기 위해서는 기존에 by viewModels 코틀린 Delegation을 활용해 주입했던 ViewModel을 Activity에 우선 주입하고, 이를 Fragment에서 activityViewModels Delegation으로 주입해주어야 했다. 이 코틀린 Delegation을 활용하기 위해서는 아래의 라이브러리가 그래들에 선언되어야 한다. // 20년 ..
[안드로이드] Material Design의 Chips를 사용해보자 Google은 Material Design과 함께 별도로 안드로이드에서 바로 사용 가능한 Component들을 제공하고 있다. 이 중 필터링 설정이나 작은 텍스트를 보여주는데 유용한 Chips를 사용해봤다. Material Design에서는 다음과 같은 네 종류의 Chip들을 정의하고 있다. Entry Chip Filter Chip Choice Chip Action Chip Entry Chip은 복잡한 정보를 간략하게 보여 줄 때 사용하도록 권장하고 있고, chip 아이콘과 닫기 아이콘을 별도로 설정이 가능하다. 추가적으로 체크 상태(선택된 상태)를 지정이 가능하다. Fliter Chip은 검색 결과나 내용등에 필터를 걸 때 사용하도록 권장하는 chip이다. 추가적으로 체크 상태(선택된 상태)를 지정이 ..
[안드로이드 | 코틀린 ] 뷰가 겹치는 상황에서 터치 우선순위 관리하기 보통 이런저런 상호작용이 들어가는 UI/UX 를 개발하다 보면 겹치는 뷰로 인해 골머리가 썩게 되기 마련이다. 이번 경우에는 BottomSheetBehavor가 적용된 Layout과 부모뷰인 SwipeRefreshLayout간의 간섭으로 인해 생기는 이슈였는데, 펼쳐진 자식뷰가 Swipe 가능한 부모뷰를 전부 덮게 되면서, 스와이프로 내릴 수 있는 자식 뷰를 내리지 못하고 부모뷰를 통째로 스와이프 해버리게 되어 결론적으로 펼쳐지고 나서는 접을 수가 없는 상황이 생겨버렸다. 터치 이벤트의 우선순위를 조정이 가능하단 것은 인지하고 있었는데, 이를 어떻게 지정해주어야 하는가? 검색끝에 깔끔한 해결책을 찾을 수 있었다. 우선순위를 두고자 하는 뷰에 onTouchListener를 넣어 특정 조건에서 부모 뷰에 r..
[안드로이드] Elevation 효과가 적용된 CardView ViewPager 구현하기 이번에 매터리얼 카드뷰 형태의 ViewPager를 구현해야 하는 요구사항이 생기면서, 일전에 한번 스쳐본 적이 있던 레퍼지토리에 다시 방문했다. rubensousa/ViewPagerCards ViewPager cards inspired by Duolingo. Contribute to rubensousa/ViewPagerCards development by creating an account on GitHub. github.com 해당 레퍼지토리에서는 일반적인 CardView 형태의 ViewPager 구현은 물론 Elevation 효과까지 적용 가능한 코드들을 제공하고 있다. JAVA 기반 소스이기에 이를 프로젝트에 적용하면서 코틀린 및 binding된 요소들과 섞는 작업을 했다. 작업을 진행하면서 필요한..