본문 바로가기

안드로이드

(47)
[Android] Compose Scrollable Column에서 처음 보여지는 타이밍 캐치하기 들어가는 글신규 기능으로 매출 분석을 차트, 막대 그래프 등 시각적으로 표현하는 기능을 개발하게 되었습니다.평소 토스의 인터랙션과 애니메이션에 관심이 많았기에 소비 분석 화면을 참고해보기로 했습니다.소비 분석엔 카테고리별 소비, 일별 소비, 월별 소비, 고정 지출 등 다양한 분석이 Column에 나열되어 있습니다.막대그래프의 높이 애니메이션, 원그래프의 애니메이션은 Column을 스크롤해 화면에 표시되는 순간 시작하게 됩니다.토스처럼 Scrollable Column에서 화면에 보여졌을 때 애니메이션이 시작되길 원했습니다.처음에는 LazyColumn을 사용해봤지만 하단을 갔다가 상단을 갔을 때 애니메이션이 다시 시작되는 문제가 있었고, debug 환경에서 프레임이 떨어지는 현상도 있어 일반 Column을 ..
[Android] Fragment.rootFragment extension property val Fragment.rootFragment: Fragment get() = parentFragment?.rootFragment ?: this Fragment가 여러 개 쌓여있는 상황일 때 가장 최상단 Fragment를 반환한다. 재귀방식으로 구현해 봤으며, RootFragment 레벨에서 ViewModel 공유가 필요할 때 사용할 수 있다. class TestFragment: Fragment() { private val testViewModel: TestViewModel by viewModels(ownerProducer = { rootFragment }) } fun Fragment.findRootFragment(predicate: (Fragment) -> Boolean): Fragment { retu..
[Android] Compose Flow.collectAsState() 파악하기 Compose에서 Flow를 State로 변환할 때 collectAsState()를 사용한다. Compose Extension 들의 구현을 알면 Compose에 대한 이해도도 키울 수 있을 것 같아 파악해보려 한다. fun Flow.collectAsState(): State @Composable fun Flow.collectAsState( initial: R, context: CoroutineContext = EmptyCoroutineContext ): State = produceState(initial, this, context) { if (context == EmptyCoroutineContext) { collect { value = it } } else withContext(context) { co..
[Android] Gson을 대체하는 Moshi 주의! 본 포스팅은 ChatGPT를 통해 만들었습니다 Caution! This Posting was made with ChatGPT Moshi란? Moshi는 Square에서 개발한 JSON 파서 라이브러리입니다. Gson과 유사하지만, 성능이 더 빠르고 코틀린과의 호환성이 더 높은 특징을 가지고 있습니다. Moshi는 자바 및 안드로이드 앱과 함께 사용할 수 있습니다. 장점 목록 Moshi는 Gson보다 더 빠릅니다. Moshi는 코틀린과의 호환성이 더 높습니다. Moshi는 직렬화 및 역직렬화를 보다 쉽게 할 수 있습니다. Moshi는 유연성이 높아 사용자 정의 형식을 처리하기 쉽습니다. Gson과의 차이 Moshi는 성능이 더 빠릅니다. Moshi는 코틀린과의 호환성이 더 높습니다. Moshi는 J..
[Android Studio] USB 케이블이 없을 때 와이파이로 디버깅 연결하기 들어가는 글.. 전에 ADB 무선 연결과 관련하여 포스팅을 작성한 적이 있습니다 https://ohdbjj.tistory.com/41 [Android Studio] adb 무선 연결(adb tcpip & adb connect) USB선을 통해 안드로이드 디버깅을 하는 경우, 연결 단자 또는 연결선의 문제로 연결이 끊길 때가 있습니다. 그래서 전 폰의 배터리 문제도 있고 연결이 끊기는 문제 때문에 무선 연결을 선호하 ohdbjj.tistory.com 위 방법의 단점은 최소 1회의 유선 연결이 필요하단 점, adb 설정과 shell을 열어야하는 부분인데 Android Studio가 발전되면서 스튜디오 자체에 무선 연결 기능이 추가되었습니다 공식 문서 https://developer.android.com/st..
[Android Studio] Git Commit 창의 Amend Commit 알아보기 AndroidStudio에서 Commit Modal을 보면 Amend Commit라고 체크하는 부분이 있습니다 무슨 기능인지 궁금하기 때문에 Amend Commit을 구글링해보면 한국어로 친절하게 설명을 해줍니다 https://backlog.com/git-tutorial/kr/stepup/stepup7_1.html 누구나 쉽게 이해할 수 있는 Git 입문~버전 관리를 완벽하게 이용해보자~ | Backlog 누구나 쉽게 알 수 있는 Git에 입문하신 것을 환영합니다. Git을 사용해 버전 관리를 할 수 있도록 함께 공부해봅시다! backlog.com 글을 읽고 직접 해보면서 확인되는 기능은 해당 브랜치의 마지막 커밋에 변경사항들을 포함시키는 기능으로 확인됩니다 마지막 커밋에 변경사항들을 포함시키는 기능 이..
[Android] ProgressBar setIndeterminateDrawable 오류 setIndeterminateDrawable을 하니 ProgressBar가 멈추는 문제가 있었다. 아래와 같이 작성하니 동작했다 progress.indeterminateDrawable = ContextCompat.getDrawable(this, R.drawable.progress)?.apply { setBounds(0, 0, progress.width, progress.height) } progress.visibility = View.GONE progress.visibility = View.VISIBLE 소스코드 안을 봐도 postInvalidate와 drawable 변경 코드들이 들어가 있는데 이상한 것 같다.
[Android] Dagger & Hilt ViewModelFactory Dagger를 통해 DI 구현 중 ViewModelProvider.Factory를 의존성 주입하여 구현하는 방법을 정리해본다. 코드들은 Kotlin으로 작성했다. import androidx.lifecycle.ViewModel import dagger.MapKey import java.lang.annotation.* import java.lang.annotation.Retention import java.lang.annotation.Target import kotlin.reflect.KClass @Documented @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @MapKey annotation class ViewModelKey(val ..