ViewTreeObserver的用法

當一個視圖樹的佈局發生改變時,可以被ViewTreeObserver監聽到, 這是一個註冊監聽視圖樹的觀察者(observer),在視圖樹的全局事件改變時得到通知。ViewTreeObserver不能直接實例化,而是通過getViewTreeObserver()獲得。 

我們知道在oncreate中View.getWidth和View.getHeight無法獲得一個view的高度和寬度,這是因爲View組件佈局要在onResume回調後完成。所以現在需要使用getViewTreeObserver().addOnGlobalLayoutListener()來獲得寬度或者高度。這是獲得一個view的寬度和高度的方法之一。

OnGlobalLayoutListener 是ViewTreeObserver的內部類,當一個視圖樹的佈局發生改變時,可以被ViewTreeObserver監聽到,這是一個註冊監聽視圖樹的觀察者(observer),在視圖樹的全局事件改變時得到通知。ViewTreeObserver不能直接實例化,而是通過getViewTreeObserver()獲得。

除了OnGlobalLayoutListener ,ViewTreeObserver還有如下內部類:


interface ViewTreeObserver.OnGlobalFocusChangeListener
當在一個視圖樹中的焦點狀態發生改變時,所要調用的回調函數的接口類

interface ViewTreeObserver.OnGlobalLayoutListener
當在一個視圖樹中全局佈局發生改變或者視圖樹中的某個視圖的可視狀態發生改變時,所要調用的回調函數的接口類

interface ViewTreeObserver.OnPreDrawListener
當一個視圖樹將要繪製時,所要調用的回調函數的接口類

interface ViewTreeObserver.OnScrollChangedListener
當一個視圖樹中的一些組件發生滾動時,所要調用的回調函數的接口類

interface ViewTreeObserver.OnTouchModeChangeListener
當一個視圖樹的觸摸模式發生改變時,所要調用的回調函數的接口類

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章