如何知道活动何时布局?

时间:2010-08-02 09:22:14

标签: android layout android-mapview

我有一个mapview,我想把一些标记放在上面。当我开始活动时,我将从web服务中检索这些,因此我需要知道当前视口的最小和最大lat / lng对。我在打电话

mMapView.getWidth()
mMapView.getHeight()

但他们都在活动开始时返回0。我尝试将它放在onAttachedToWindow,onResume,onPostCreate,onPostResume,onStart等等,但无济于事。我怎么知道活动已完成所有视图的布局并准备好给我正确的高度和宽度测量值?

2 个答案:

答案 0 :(得分:6)

从我发现谷歌搜索的this post

  

假设你的视图是可见的,那就是它   尺寸已按时分配   活动的窗口获得焦点。那   是,当activity.onWindowFocusChanged   使用hasFocus = true调用。

     

序列大致是:

     

view.onFinishInflate

     

view.onMeasure

     

view.onSizeChanged(width,height,0,0)

     

view.onLayout

     

activity.onWindowFocusChanged(真)

我尝试过它。

修改

我发现使用ViewTreeObserver可能会更好,请参阅this answer

答案 1 :(得分:2)

我认为你必须覆盖onSizeChanged并从那里调用getWidth / Height。请注意,在活动的生命周期中,onSizeChanged可能会被多次调用(每次视图大小发生变化)。