개발/Android
[안드로이드/kotlin] ViewTreeObserver로 View의 크기 구하기
뚀니 Ddoeni
2022. 5. 30. 12:01
728x90
View에는 width, height 혹은 measuredWidth, measuredHeight 함수가 존재한다.
하지만 이걸 onCreate() 에서 호출하게 되면 0을 리턴하게 된다. onCreate 시점에는 View가 아직 그려지기 전 단계이기 때문이다.
뷰의 크기를 구하기 위해서는 'ViewTreeObserver'를 사용하면 되는데, 이름 그대로 ViewTree에 대한 옵저버(감시 혹은 관찰)라고 보면 된다.
A view tree observer is used to register listeners that can be notified of global changes in the view tree.
공식 문서에도 설명이 상세하게 기재되어 있다. 말 그대로 View Tree가 변경될 때 변경사항을 알릴 수 있는 리스너를 등록할 때 사용하는 것이다.
https://developer.android.com/reference/android/view/ViewTreeObserver
ViewTreeObserver | Android Developers
android.net.wifi.hotspot2.omadm
developer.android.com
view.viewTreeObserver.addOnGlobalLayoutListener(object :
ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
val viewHeight = view.height
view.viewTreeObserver.removeOnGlobalLayoutListener(this)
}
})
사용법은 간단하다. 뷰의 viewTreeObserver를 가져와 OnGlobalLayoutListener를 더해주면 된다.
확인 후에는 removeOnGlobalLayoutListener()를 통해 Listener를 제거해줄 수 있다.
실행 결과)


300x250