-
Jetpack Compose Modifier.onFocusChanged에서 animateScrollTo 가 작동안되는 문제Android 2022. 4. 7. 17:21반응형
기존에 TextField 에서 onFocusChanged 가 될때 animateScrollTo를 하는 기능이 있었는데
compose 버전을 1.0.5 에서 1.1.1 로 업데이트하면서
작동이 안되는 문제가 발생하였습니다.
해당문제에 대해서 테스트를 하다보니 animateScrollTo 가 아닌 scrollTo 를 사용하면 정상적으로 스크롤 이동이 가능하여
에니메이션 관련으로 검색중에 해당문제에 대한 힌트를 아래 이슈에서 찾을 수 있었습니다.
https://issuetracker.google.com/issues/212982472
Google Issue Tracker
issuetracker.google.com
해당현상은 onFocusChanged 가 호출시 Focus내부 에니메이션이 실행되면서 animateScrollTo 에 대한 에니메이션이 강제로 스킵되어 버립니다.
정확히는 bringIntoViewRequester.bringIntoView()가 영향을 끼친다고 하는데
내부에서 animateScrollTo를 호출하는 것으로 예상됩니다.
그래서 해결방법은 약간의 시간 간격을 두고 에니메이션을 재생하면 onFocusChanged 내부의 에니메이션 작동 이후에 animateScrollTo의 에니메이션도 작동되어 정상적으로 이동이 되는것을 확인 되었습니다.
before
...... .onFocusChanged { isFocusedState.value = it.isFocused when { it.isFocused -> { coroutineScope.launch { scrollState?.animateScrollTo(scrollToPosition.toInt()) } onFocusIn() } else -> { onFocusOut() } } } ......
after
...... .onFocusChanged { isFocusedState.value = it.isFocused when { it.isFocused -> { coroutineScope.launch { delay(10) scrollState?.animateScrollTo(scrollToPosition.toInt()) } onFocusIn() } else -> { onFocusOut() } } } ......
[참고링크]
https://developer.android.com/reference/kotlin/androidx/compose/foundation/ScrollState#animateScrollTo(kotlin.Int,androidx.compose.animation.core.AnimationSpec)ScrollState | Android Developers
androidx.car.app.managers
developer.android.com
https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Scrollable.kt;drc=163e2469c85eedf0604a9a90abfebd606fee9ab2;l=540
cs.android.com
https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Focusable.kt;drc=dc3cc99d395909550d026effa5a001d7005dccca;l=108
cs.android.com
https://issuetracker.google.com/issues/184670295
Google Issue Tracker
issuetracker.google.com
https://intrepidgeeks.com/tutorial/jetpack-compose-110--change-summary
Jetpack Compose 1.1.0🎉 변경사항 요약
2월 9일 Jetpack Release Note의 내용 중, Compose 1.1.0 에 대한 정리입니다. 더 궁금하신 점은 국내 유일(?) Jetpack Compose 커뮤니티에서 대화를 나눠보세요. 2월 9일 릴리즈 노트 중 가장 중요한 변경사항입
intrepidgeeks.com
https://developer.android.google.cn/jetpack/androidx/releases/compose-foundation?hl=ko#1.1.0Compose 기초 | Android 개발자 | Android Developers
Compose 기초 즉시 사용 가능한 구성요소를 사용해 Jetpack Compose 애플리케이션을 작성하고 기초를 확장해 나만의 디자인 시스템 요소를 빌드합니다. 최근 업데이트 공개 버전 출시 후보 베타 버전
developer.android.google.cn
Jetpack Compose animateScrollTo to absolute coordinates or direct to element
For scrolling in compose i use scrollState.animateScrollTo() and get coordinate element by onGloballyPositioned {positionInRoot/positionInParent}. animateScrollTo moving by the offset val...
stackoverflow.com
https://stackoverflow.com/questions/66249829/jetpack-compose-scroll-to-focused-composable-in-column
Jetpack Compose - Scroll to focused composable in Column
I have UI like this: val scrollState = rememberScrollState() Column( modifier = Modifier .fillMaxSize(1F) .padding(horizontal = 16.dp) ...
stackoverflow.com
반응형'Android' 카테고리의 다른 글
2023년 4월 정책 업데이트 Google play 정책 세미나 (0) 2023.04.26 Clean Architecture in Android (0) 2023.01.30 Modern Android App Architecture (0) 2022.12.11 Android studio/InteliJ IDEA Code inspections (0) 2022.09.08 Null Coalescing Operator(with. databinding) (0) 2022.01.05 Modifier in Jetpack Compose (0) 2021.12.15 Android adb 사용 여부 앱에서 확인하는 법 (0) 2021.12.14 Android 12 Splash Screen (스플래시 스크린) (0) 2021.12.09