У меня есть mapview, что я хочу добавить некоторые маркеры. Я извлечу их из веб-службы, когда начну свою деятельность, поэтому мне нужно знать минимальные и максимальные пары lat/lng для текущего видового экрана. Я звоню
mMapView.getWidth()
mMapView.getHeight()
Но они оба возвращают 0, когда начинается действие. Я попытался поместить его в onAttachedToWindow, onResume, onPostCreate, onPostResume, onStart и т.д., Но безрезультатно. Как я могу узнать, что деятельность завершена, выложив все взгляды и готова дать мне правильные измерения высоты и ширины?
Я думаю, вам нужно переопределить onSizeChanged и вызывать getWidth/Height оттуда. Имейте в виду, что onSizeChanged может вызываться несколько раз в течение жизненного цикла вашей деятельности (каждый раз, когда изменяется размер представления).
Из этот пост, что я нашел googling:
Предполагая, что ваш вид виден, его размер был присвоен к моменту Окно активности получает фокус. Что есть, когда activity.onWindowFocusChanged вызывается с hasFocus = true.
Последовательность примерно:
view.onFinishInflate
view.onMeasure
view.onSizeChanged(ширина, высота, 0, 0)
view.onLayout
activity.onWindowFocusChanged(истина)
Я пробовал, и это сработало.
ИЗМЕНИТЬ
Я обнаружил, что, вероятно, лучше использовать ViewTreeObserver
, см. этот ответ.