我已經看到大量不同的問題和答案,用於檢索視圖的高度和寬度的問題,特別是this線程。獲取視圖尺寸的最佳做法,可能在它們被繪製到屏幕之前
下面是提到的方法來檢索查看維度:您的活動
- onWindowFocusChanged()或者onSizeChanged(),onLayout(),或onMeasure()
- 使用ViewTreeObserver和addOnGlobalLayoutListener()
他們每個人都似乎在某些情況下工作,而在其他情況下,人們說someth ing不能正常工作。由於對於View類沒有setOnDimensionsKnown(OnDimensionsKnown odk)或類似的方法,所以這些方法中的哪一個(或者可能沒有提到的一個)會給我我的視圖最終會有的尺寸,無論它是否被繪製,都有wrap_content或fill_parent參數,還是有明確的高度和寬度設置爲px,dp或類似?
編輯:也許一個具體的例子將是有益的,我試圖做一個PopupWindow包裹它的內容,並通過它的寬度值在-x方向偏移。問題是內容的寬度,因此popupwindows的寬度,直到我顯示彈出窗口後才被測量。所以基本上我想不出一個好的方法來測量它在繪製到屏幕之前的寬度。
我通常的做法是重寫任何視圖類,我需要繪製之前的維度,並創建我自己的setOnDimensionsKnown(OnDimensionsKnown odk)方法,並使用調用onMeasure時調用的寬度和高度值。這適用於我需要的每一種情況,但重寫每個視圖類並不是很優雅。
我可以發佈代碼來幫助解釋更多的例子。