Android 9

[Compose] Row 안에서 아이콘을 옆 텍스트의 첫번째 라인 가운데에 맞추기

Row 안에 아이콘과 텍스트를 배치할때 아이콘이 수직 방향으로 텍스트의 첫번째 라인 가운데에 위치 시켜야 하는 경우가 있다. 이럴땐 RowScope 내에서 활용할 수 있는 alignBy Modifier 를 활용할 수 있다. alignBy 를 활용하면 Row 가 내부의 요소들을 배치할때 참고할 수 있는 기준을 제공할 수 있다. icon 높이의 중앙텍스트의 첫번째 라인의 중앙을 정렬 기준선으로 제공하면 Row 가 이 기준선을 활용하여 요소들을 수직 방향에서 정렬되게 배치해준다. icon 높이의 중앙은 alignBy 의 람다 파라미터로 전달받은 Measured 를 활용해서 쉽게 계산할 수 있다. 이 Measured 객체는 alignBy Modifier 가 적용된 UI 요소의 레이아웃 측정값을 가지고 있다. 텍..

[Compose] TooltipBox

📌 TooltipBox란?TooltipBox는 Jetpack Compose의 Material3 라이브러리에서 제공하는 툴팁(Tooltip) 기능입니다. UI 요소 위에 작은 정보 박스를 표시하여 추가 설명을 제공할 때 유용합니다.🎯 툴팁이 필요한 상황버튼이나 아이콘의 기능을 설명할 때마우스 오버 시 추가 정보를 제공할 때긴 텍스트나 복잡한 UI 요소에 대한 설명을 보조할 때🎯 사용 예시 🛠️ TooltipBox 기본 사용법TooltipBox는 실험적(Experimental) API이므로 사용하려면 @OptIn(ExperimentalMaterial3Api::class) 어노테이션을 추가해야 합니다.1️⃣ 기본 사용 예제@OptIn(ExperimentalMaterial3Api::class)@Compo..

[Compose] Compose 에서 구성 변경(Configuration Change) 시 UI 상태 유지

📌 androidx.compose.runtime.saveable 패키지란?Jetpack Compose에서 구성 변경(Configuration Change) 시 UI 상태를 유지하려면 androidx.compose.runtime.saveable 패키지를 활용해야 합니다. 이 패키지는 화면 회전, 다크모드 변경, 프로세스 종료 후 복원 등에서 UI 상태가 유지될 수 있도록 도와줍니다.✅ 주요 APIAPI설명rememberSaveable구성 변경 시에도 상태를 유지하도록 remember를 확장한 함수Saver커스텀 객체를 저장할 수 있도록 변환하는 클래스mapSaverSaver의 간단한 버전으로, Map을 통해 객체를 저장 및 복원listSaverSaver의 간단한 버전으로, List를 사용하여 객체 저장 ..

[Compose] SnapshotStateList

SnapshotStateList란?SnapshotStateList는 Jetpack Compose에서 상태 관리를 위한 MutableList의 Compose-friendly 버전입니다.Compose의 remember와 함께 사용하면 리스트의 변경 사항(요소의 추가, 삭제, 교체 등)을 자동으로 Compose의 UI에 반영할 수 있습니다.Jetpack Compose에서는 MutableList를 직접 사용하면 변경 사항이 UI에 반영되지 않습니다.이는 Compose가 MutableList의 변경을 감지하지 않기 때문입니다.이를 해결하기 위해 mutableStateListOf()를 사용하여 Compose에서 상태 변경을 추적할 수 있도록 합니다.왜 SnapshotStateList가 필요한가?일반적인 Mutabl..

Access app-specific files 가이드 문서 정리

이 글은 구글 안드로이드 가이드 문서인 Access app-specific files 을 읽고 정리한 내용입니다. 틀린 내용이 있을 수 있습니다. 많은 경우에 앱은 자신들만 사용할 파일들을 저장하고, 관리하는 경우가 많다. 안드로이드에서는 이러한 파일들을 관리하기 위해서 다음과 같은 저장소를 관리한다. Internal Storage : 다른 앱은 접근할 수 없는 오직 본인의 앱만이 접근할 수 있는 영역이다. 영구적인 데이터를 저장하는 디렉토리와 캐시 데이터를 저장하는 디렉토리로 나뉜다. 앱이 제거된 경우 이 저장소에 있던 데이터도 함께 제거된다. External Storage : 권한만 있다면 다른 앱도 접근할 수 있는 영역이다. 역시 영구적인 데이터르르 저장하는 디렉토리와 캐시 데이터를 저장하는 디렉토..

[Android Test] 안드로이드 Test Double & Dependency Injection Basic

Test Double Android 앱의 한 Component 에 대한 Unit Test 를 작성하는 경우, 다른 Component 의 동작을 제외한 해당 Component 만의 Test 를 작성하는 것이 중요하다. 하나의 Component 가 동작하기 위해서 필요한 다른 모든 Component 를 해당 Component 의 Dependency(의존성) 이라고 한다. Component 의 Unit Test 를 작성할때 다른 Dependency 에 대한 테스트를 제외해야 하는 이유는 다음과 같다. Test Speed : 만약 테스트할 Component 의 코드는 에뮬레이터 없이 실행될 수 있지만, 해당 Component 의 Dependency 들이 실행될 때 에뮬레이터가 필요한 경우, Component 의..

[Android Test] 안드로이드 Test Basic

이 글은 Udacity Android Kotlin Developer 강좌를 수강하고 난 뒤 개인적인 학습을 위해 정리한 내용입니다. 틀린 내용이 있을 수 있습니다. 안드로이드 테스트 코드 읽기 쉽게 작성하기 안드로이드 개발에서 테스트 코드는 프로덕트 코드의 문서 역할을 할 수가 있다. 프로덕트 코드가 어떤 역할을 하는지 테스트 코드를 통해 보여줌으로써 프로덕트 코드를 설명할 수 있다. 테스트 코드는 프로덕트 코드가 변함에 따라 테스트 성공을 위해 반드시 갱신되어야 한다는 점에서 항상 최신화가 되는 문서가 된다는 장점이 있다. 그러므로 문서의 기능도 수행할 수 있는 테스트 코드를 다른 사람이 읽기 쉽게 작성하는 것이 좋다는 것은 당연하다. 읽기 쉬운 테스트 코드 작성을 위해서 다음과 같은 3가지 방법을 사..

Execution failed for task ':app:mergeDebugAndroidTestJavaResource'. > A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade > More than one file was found with OS independent path 'META-INF/AL2.0'.

안드로이드 테스트를 공부하던 와중에 에러가 발생했다. 다음과 같이 코루틴 테스팅 관련 dependency 를 추가한 뒤 빌드하는 과정에서 에러가 발생했다. 문제를 일으킨 Dependency androidTestImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutinesVersion" 에러 코드 Execution failed for task ':app:mergeDebugAndroidTestJavaResource'. > A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade > More than one file was fo..

[Android] PopupWindow 로 툴팁 스타일 메뉴 만들기

회사에서 툴팁 스타일의 메뉴를 구현해달라는 요청이 들어왔다. 어떤 뷰가 롱 프레스 되었을 때 해당 뷰의 특정 위치에 툴팁 형태로 메뉴가 나타나서 사용자가 인터렉션 할 수 있는 형태이다. ContextMenu 를 사용해야하나 봤더니 아이콘 지원이 되지 않는것 같아서 사용할 수 없었다. 구글링 결과 PopupWindow(https://developer.android.com/reference/android/widget/PopupWindow) 라는 클래스를 이용해서 툴팁 메뉴를 구현할 수 있을 것 같았다. PopupWindow | Android Developers developer.android.com 1. 레이아웃 작성 툴팁 메뉴로 쓰일 레이아웃을 작성한다. 이 예제에서는 '완료', '복사', '삭제' 세 가..