我有一个mapview,我想把一些标记放在上面。当我开始活动时,我将从web服务中检索这些,因此我需要知道当前视口的最小和最大lat / lng对。我在打电话
mMapView.getWidth()
mMapView.getHeight()
但他们都在活动开始时返回0。我尝试将它放在onAttachedToWindow,onResume,onPostCreate,onPostResume,onStart等等,但无济于事。我怎么知道活动已完成所有视图的布局并准备好给我正确的高度和宽度测量值?
答案 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可能会被多次调用(每次视图大小发生变化)。