숨참고 개발다이브

[안드로이드/kotlin] ViewTreeObserver로 View의 크기 구하기 본문

개발/Android

[안드로이드/kotlin] ViewTreeObserver로 View의 크기 구하기

사라 Sarah 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
Comments