我最初的问题是需要知道我的根的高度和宽度,View以便我可以进行编程布局更改。出于我的目的,我不一定需要在onCreate();期间确定此信息。对我来说,在 root 的布局完成后以编程方式添加我的 child 就足够了View,因此我很乐意onWindowFocusChanged()用作挂钩来确定何时调用 root并View返回有效结果。getWidth()getHeight()
但是,我看到很多人问如何View在onCreate(). 我猜人们想这样做是为了更好的用户体验——也许是为了让用户看不到分阶段构建的布局(如果有人能澄清原因,我会很感激)。现在,我通常看到的答案,例如这里的答案,是将 a 发布到内Runnable的根目录。在里面我们执行,等等。这样做的原因显然是因为发布到 a 的对象是在具有布局和/或附加到窗口时执行的。ViewonCreate()RunnablegetWidth()RunnableViewView
这让我想到了我的问题。在 API 文档中View,它似乎没有描述这种行为。那么,谁能告诉我它是在哪里定义和记录的?或者,是检查源头的问题吗?它是一个绝对且严格定义的功能,Runnables将留在 aView的队列中,并且仅在布局过程之后的某个时间点处理吗?
进一步澄清:在阅读 Kerry 的答案并仔细考虑后,我的基本问题可以澄清如下:在这里给出的答案以及这个CodeProject 条目中,我知道我们解决了根View's维度不存在的问题期间可onCreate()通过发布Runnable到View。正如 Kerry 指出的那样,保证是Runnable在执行之前不能执行此消息onCreate()。我知道布局发生在 之后的某个时间点onCreate,但我现在仍然无法理解为什么在' 的尺寸已知Runnable时应该执行此操作。View