天天看點

最簡單也最難——如何擷取到Android控件的高度問題原因解決

如何擷取一個控件的長和高,相信很多朋友第一眼看見這個問題都會覺得很簡單,直接在onCreate裡面調用getWidth、getMeasuredWidth不就可以獲得了嗎,但是,事實上是并沒有簡單的,不信的話,你可以去試一下,在onCreate裡面,你是無法獲得長寬值的,始終為0。

這是為什麼呢,其實熟悉view繪制流程的朋友應該一眼就看出來了,在onCreate中,我們的控件其實還并沒有畫好,換句話說,等onCreate方法執行完了,我們定義的控件才會被度量(measure),是以我們在onCreate方法裡面通過view.getHeight()擷取控件的高度或者寬度肯定是0。

No1:

這種方法很簡單,就是我們自己來測量

No2:

這個方法,我們需要注冊一個ViewTreeObserver的監聽回調,這個監聽回調,就是專門監聽繪圖的,既然是監聽繪圖,那麼我們自然可以擷取測量值了,同時,我們在每次監聽前remove前一次的監聽,避免重複監聽。

No3:

這個方法于第2個方法基本相同,但他是全局的布局改變監聽器,是以是最推薦使用的。

OK,現在看來,看似簡單問題也不是那麼簡單吧。

以上。

繼續閱讀