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