Мне нужно подготовить некоторые объекты на основе исходного макета виджетов и представлений в моей деятельности. Я хотел бы сделать это на этапах инициализации, в идеале onCreate и onStart. Учитывая возможность изменений, которые происходят, когда мы не находимся на переднем плане, некоторые из них, возможно, должны произойти в onResume.Когда андроид сначала делает макет?
Итак, я проверил, могу ли я измерить, как мои взгляды были выложены.
Log.d("MyApp", "w,h of X is " + findViewById(R.id.X).getWidth() +
"," + findViewById(R.id.X).getHeight());
Я запустил это в onCreate, onStart и onResume. Каждый раз, когда я получаю 0,0 для ширины, высоты. Если я буду ждать onTouchEvent, я получаю информацию о макете, поэтому макет будет выполнен к тому времени.
Я удивлен, что макет не установлен и окончателен к тому времени, когда я вижу onResume. Я ожидал, что виджеты будут уже выложены и готовы к тому, чтобы поиграть с ними.
Я сделал трассировку стека на onSizeChanged метод, и он приходит от цикл отправки сообщений. – Brian
Невозможно установить обработчик onSizeChanged без подкласса, что является неудачным, поскольку некоторые макеты не имеют конструкторов. Вы в конечном итоге должны много работать для чего-то, что должно быть тривиально. – 2010-12-19 18:04:05
@dpk вы можете использовать ViewTreeObserver для установки связки обратного вызова, связанной с чертежом и компоновкой, и, таким образом, избегать подкласса представления. –