9
我需要根據我的活動中窗口小部件和視圖的初始佈局準備一些對象。我想在初始化步驟中完成,理想情況下是onCreate和onStart。考慮到我們不在前臺時發生變化的可能性,其中一些可能需要在onResume中發生。什麼時候android首先做佈局?
所以我檢查了我是否可以衡量我的觀點是如何佈置的。
Log.d("MyApp", "w,h of X is " + findViewById(R.id.X).getWidth() +
"," + findViewById(R.id.X).getHeight());
我在onCreate,onStart和onResume中運行了這個。每次我得到0,0的寬度,高度。如果我等待onTouchEvent,我會得到佈局信息,所以佈局在那時完成。
我很驚訝佈局沒有設置和最終的時間,我看到onResume。我預計這些小部件已經佈置好了,並準備好擺弄。
我做的onSizeChanged方法的堆棧跟蹤,它確實來自消息調度循環。 – Brian 2010-01-22 02:20:19
似乎沒有辦法在沒有子類化的情況下設置「onSizeChanged」處理程序,這是不幸的,因爲某些佈局沒有構造函數。你最終不得不爲那些應該是微不足道的事情做很多工作。 – 2010-12-19 18:04:05
@dpk您可以使用ViewTreeObserver設置與繪圖和佈局相關的一堆回調,從而避免必須對視圖進行子類化。 – 2013-04-13 02:41:29