Когда андроид сначала выполняет макет?

Мне нужно подготовить некоторые объекты на основе первоначального расположения виджетов и представлений в моей деятельности. Я хотел бы сделать это на этапах инициализации, в идеале 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. Я ожидал, что виджеты будут уже выложены и готовы к тому, чтобы поиграть с ними.

Макет выполняется по иерархии представлений по мере необходимости.

Когда ваше приложение onResume() , это будет через некоторое время после onResume() (когда ваше окно будет onResume() и помещено на экран).

Правильный способ узнать о действиях макета – через обратные вызовы различных View.onSizeChanged() иерархии – View.onSizeChanged() т. Д., Как View.onSizeChanged() в разделе «Макет» здесь :