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