본문 바로가기

안드로이드

(80)
[Android/Jetpack Compose] 컴포즈에서 터치 이벤트를 처리할 때의 유의점 Jetpack Compose 아이템의 더블탭 이벤트에 따라 애니메이션을 수행하는 개발을 진행중에 있었다. 이벤트 처리도 손쉽게 Modifier로 마무리 됐구나 생각한 찰나, 애니메이션이 의도대로 재생되지 않았고 긴 추적 끝에 터치 이벤트를 통해 전달된 대상 state가 재생을 필요하는 UI의 state와 일치하지 않는 것을 확인했다. 아래는 doubleTap 제스처를 트래킹하는 Android Developers page 스니펫인데, pointerInput의 parameter를 Unit으로 운영하는 걸 확인할 수 있다. var zoomed by remember { mutableStateOf(false) } var zoomOffset by remember { mutableStateOf(Offset.Zero)..
[Android/Jetpack Compose] Spannable string 처리하기 기존의 xml 베이스의 레이아웃을 Jetpack compose로 전환하면서 특정 부분의 텍스트에 스타일과 클릭 이벤트를 줘야 하는 Spannable 처리가 필요했다. Spannable 처리를 통해 부분적으로 string 스타일을 바꿀 수 있을 뿐더러, 클릭시 url 오픈 등의 가이드 액션도 적용할 수 있다. 이를 위해서 사용한 API는 AnnotatedString이다. 누군가는 string을 각각 append하는 방식으로 spannable 처리를 하기도 했는데, 다국어 및 리소스 관리에서 불편함이 많을 것 같아서, 일단 기본 문장을 넣어놓고, spannable 처리를 하고자 하는 단어들을 별도로 선별해 스타일 및 클릭 이벤트를 처리하도록 적용했다. 1. AnnotatedString을 만드는 Composa..
안드로이드 RecyclerView 커스텀 LayoutManager 구성하기 현재 안드로이드에서는 RecyclerView와 사용 가능한 세 개의 LayoutManager를 제공하고 있다.(GridLayoutManager, LinearLayoutManager, StaggeredLayoutManager) 하지만 경우에 따라 여기중 어느 것으로도 원하는 아이템 구성을 RecyclerView에 적용하지 못할 수 있다. 그렇다면 이제.. 직접 커스텀 LayoutManager를 구성해야만 한다! 이번 작업을 위해 아래의 포스트를 참조했다. A Custom LayoutManager Case: Bumble Beeline A step by step guide to building a custom LayoutManager medium.com 이제 직접 해야할 때 커스텀 LayoutManager를 ..
[Jetpack/Compose] Compose 핵심 정리 요즘 세상 핫한 Jetpack Compose의 코드 랩을 마치면서, 내가 느낀 키포인트 네가지에 대해 정리하고 넘어가고자 한다! 1. Declaritive UI 이전의 명령형 UI(Imperative UI)가 현재 구성되어 그려진 View의 상태에 의존적이었다면, 선언형 UI는 현재 View 상태에 대한 의존 없이 철저하게 View를 구성하는 데 사용한 데이터에 기반해 화면을 그린다. 더 쉽게 말하자면, 선언형 UI는 UI를 그리는 순간에 대해서만 정의할 뿐, 그려진 UI에 대해서는 생각하지 않는다. 보이는 화면을 바꾸고 싶다면, 보이는 화면이 아닌 보이는 화면을 그린 방법을 살피는 것이다. (이는 Recomposition을 이해하면 더 쉽게 이해될 것이다.) 이전에 MVVM 등의 아키텍처 구조에 익숙하..
[Android/UI-UX] 텍스트의 일부에 스타일 및 터치 이벤트 설정하기 안드로이드 TextView에 적용하는 Text의 일부의 스타일을 바꾸고, 터치 이벤트도 주고 싶다면 어떻게 해야 할까? Spannable Text로 이를 해결할 수 있다. 1. 적용하고자 하는 string을 toSpannable()을 사용해 Spannable로 만든다. 2. setSpan으로 적용할 Span을 필요한 만큼 설정한다. 클릭 이벤트를 주고 싶다면 ClickableSpan을, 텍스트 스타일을 변경하려면 TextApperanceSpan을 사용한다. 3. 설정이 완료된 Spannable을 적용하고자 하는 TextView의 text에 설정하면 된다. val textView: TextView val sampleString = "Clickable and styleable" val clickableSpa..
[Android] Android lifecycle과 savedInstanceState 안드로이드의 시작과 끝은 Activity와 Fragment의 lifecycle이다 할 수 있을 정도로 lifecycle에 대한 중요성은 여러번 말해도 모자르지 않다 싶다. 이전부터 개발자들이 가져왔던 고민들은 앱의 화면방향 전환이 일어나는 경우, 언어가 변경되는 경우, 화면 해상도가 변경되는 경우 등 다양한 변수로 인해 기존의 Activity 혹은 Fragment가 destroy된 이후 다시 재생성되는 케이스를 어떻게 대처할 것인지 일 것이다. 이러한 환경에서 주요 변수를 보존하기 위해 안드로이드는 savedInstanceState를 제공한다. 재생성 및 savedInstanceState에 관해 중요한 내용들을 간단히 정리해 보았다! Activity 및 Fragment Activity가 Backgroun..
[Android/UI-UX] 유동적인 TextView의 사이즈를 제한하고, 정렬까지(with ConstraintLayout) UI 구성을 하면서 때때로 유동적으로 늘어나는 View 때문에 골머리를 앓을 때가 많다. 극단적으로 짧은데서 극단적으로 길어질 수 있는 텍스트를 담는 TextView, 그리고 이 좌측에 붙어야 하는 ImageView까지.. 하드코딩으로 가기 쉬운 요구사항 들이다. 다행스럽게도 안드로이드에는 ConstraintLayout이 있었으니, 이를 이용해 아래 세가지의 요구사항을 모두 충족시킬 수 있었다. TextView는 화면의 우측에 붙는다. TextView는 화면의 중앙 영역까지만 늘어난다 TextView의 좌측에는 아이콘이 들어간 ImageView가 있어야 한다.
[안드로이드/Firebase] adb를 Android studio 터미널에 설정하기, adb 이용해 Firebase event 디버깅하기 Firebase analytics는 앱으로부터 입력받은 다양한 이벤트를 기반으로 사용자 분석을 돕는 유용한 툴이다. 다만 개발자가 지정한 이벤트가 의도한대로 올바르게 들어오는지에 대해서는 로컬에서 확인하기가 어려울 수 있다. 이를 위해 Firebase는 DebugView라는 기능을 제공한다. adb(Android Debug Bridge)를 이용해 원하는 디바이스를 Firebase Debug View에서 모니터링 할 수 있도록 설정하고 나면, 앱을 실행해 사용하는 중에 들어오는 이벤트를 실시간으로(물론 서버를 거치기 때문에 딜레이가 조금 있다.)확인이 가능하다. 그것도 아주 이쁘게. 그렇다면 우선 adb를 안드로이드 스튜디오에 설정하고, 다음 DebugView에서 기기를 보기 위한 명령어를 살펴보겠다. 1..