메모 log (간단메모)/mobile

'viewTreeObserver' 뷰의 크기를 측정

abbear25 2021. 1. 14. 00:20

viewTreeObserver

root_view.viewTreeObserver.addOnGlobalLayoutListener ( object: ViewTreeObserver.OnGlobalLayoutListener{
            override fun onGlobalLayout() {
                //뷰 측정 등을 구현
                //사용 후 해제
                root_view.viewTreeObserver.removeOnGlobalLayoutListener(this)
            }
        })

최상단 뷰가 화면에 그려진 후에 호출되는 관찰자

xml 레이아웃에 가장 바깥쪽 요소에 관찰자를 지정해야 함

예전에는 다른 뷰의 크기를 측정 후 특정 뷰의 크기를 지정하기 위해서 뷰를 커스텀하거나 딜레이를 주는 형태로 구현하였으나

해당 관찰자를 통해 뷰가 반영된 시점을 정확히 파악하여 크기를 측정할 수 있음

*뷰가 그려지기 전에 크기를 측정하면 높이과 넓이가 모두 0으로 나옴

 

 

반응형