Как узнать, когда выложена активность? - PullRequest
1 голос
/ 02 августа 2010

У меня есть вид карты, на который я хочу поместить несколько маркеров.Я получу их из веб-службы, когда начну задание, поэтому мне нужно знать минимальную и максимальную пары широта / долгота для текущего окна просмотра.Я звоню

mMapView.getWidth()
mMapView.getHeight()

Но они оба возвращают 0, когда начинается действие.Я попытался поместить его в onAttachedToWindow, onResume, onPostCreate, onPostResume, onStart и так далее, но безрезультатно.Как я могу узнать, что задание завершило разметку всех видов и готово дать мне правильные измерения высоты и ширины?

Ответы [ 2 ]

6 голосов
/ 28 января 2011

Начиная с этой записи , которую я нашел в Google:

Предполагая, что ваш видимость видна, ее размер был назначен к тому времени, когда окно действия получает фокус.То есть, когда Activity.onWindowFocusChanged вызывается с hasFocus = true.

Последовательность примерно равна:

view.onFinishInflate

view.onMeasure

view.onSizeChanged (ширина, высота, 0, 0)

view.onLayout

activity.onWindowFocusChanged (true)

Я попытался, и это сработало.

РЕДАКТИРОВАТЬ

Я обнаружил, что, вероятно, лучше использовать ViewTreeObserver, см. этот ответ .

2 голосов
/ 02 августа 2010

Я думаю, вам нужно переопределить onSizeChanged и вызвать getWidth / Height оттуда. Имейте в виду, что onSizeChanged может вызываться несколько раз в течение жизненного цикла вашей активности (каждый раз, когда изменяется размер представления).

...