Когда Android впервые делает макет? - PullRequest
9 голосов
/ 22 января 2010

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

Я удивлен, что макет не установлен и окончательный, когда я вижу на Resume. Я ожидал, что к тому времени виджеты будут уже разложены и готовы к работе.

1 Ответ

4 голосов
/ 22 января 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...