안드로이드 코틀린 ViewTreeObserver 뷰가 그려지는 시점
2023. 10. 21. 13:15ㆍ- 안드로이드/kotlin
안드로이드 프로젝트를 진행하던중 특정 뷰의 높이가 필요하여 높이를 구하였습니다.
하지만 뷰의 높이는 0으로 나왔습니다.
전에도 비슷한 경험이 있었던거 같은 가물가물한 기억속에 화면에 뷰가 그려지기 전에 높이를 구해서 그런거구나 라고 이전에 삽질하고 알아냈던 것이 떠올랐습니다.
view가 그려지는 시점에서 높이를 구하면 제대로 알 수 있을것입니다.
그렇다면 view가 그려지는 시점을 알수 있는 ViewTreeObserver에 대해 알아 보겠습니다.
ViewTreeObserver 리스너는 여러 종류가 있습니다.
리스너 | 설명 |
onDrawListener | 뷰 트리가 그려지려고 할 때 호출될 콜백에 대한 인터페이스 정의입니다. |
OnGlobalFocusChangeListener | 뷰 트리 내의 포커스 상태가 변경될 때 호출될 콜백에 대한 인터페이스 정의입니다. |
OnGlobalLayoutListener | 뷰 트리 내 뷰의 가시성 또는 전역 레이아웃 상태가 변경될 때 호출될 콜백에 대한 인터페이스 정의입니다. |
OnPreDrawListener | 뷰 트리가 그려지려고 할 때 호출될 콜백에 대한 인터페이스 정의입니다. |
OnScrollChangedListener | 뷰 트리의 무언가가 스크롤되었을 때 호출될 콜백에 대한 인터페이스 정의입니다. |
OnTouchModeChangeListener | 터치 모드가 변경될 때 호출될 콜백에 대한 인터페이스 정의입니다. |
OnWindowAttachListener | 뷰 계층 구조가 창에 연결 및 분리될 때 호출될 콜백에 대한 인터페이스 정의입니다. |
OnWindowFocusChangeListener | 뷰 계층의 창 포커스 상태가 변경될 때 호출될 콜백에 대한인터페이스 정의입니다. |
필요한 리스너를 사용하면 되겠습니다. 여기서 제가 이용할 리스너는 OnGlobalLayoutListener 입니다.
아래는 리스너를 등록후 사용하는 모습입니다.
binding.containerHeight.getViewTreeObserver()
.addOnGlobalLayoutListener(object : OnGlobalLayoutListener {
override fun onGlobalLayout() {
val height: Int = binding.containerHeight.getHeight() // 높이 구하기
// 마지막엔 리스너를 제거 해줘야함
binding.containerHeight.getViewTreeObserver().removeOnGlobalLayoutListener(this)
}
})
'- 안드로이드 > kotlin' 카테고리의 다른 글
코틀린 버튼 클릭 효과주기 (0) | 2023.11.01 |
---|---|
안드로이드 스튜디오 sharedPreference 저장경로 (0) | 2023.10.25 |
코틀린 재귀함수 진행 순서 정리 (1) | 2023.10.13 |
코틀린 비동기처리 코루틴 사용법 (0) | 2023.10.11 |
코틀린 char을 조건문에서 사용할때는 '' 사용 (0) | 2023.09.12 |