`getLeft()` возвращает ноль в `onWindowFocusChanged()`

#android #android-layout #android-xml

#Android #android-макет #android-xml

Вопрос:

У меня есть отдельный класс, Answer который расширяется ImageView . Этот объект программно добавляется в представление контейнера, а затем вызывается метод инициализации положения в onWindowFocusChanged() — этот метод устанавливает правильные поля и параметры макета и включает видимость. Затем я пытаюсь получить начальную позицию X ответа, вызвав getLeft() . Независимо от того, вызвано ли это из класса ответов this.getLeft() или из основного действия answer_object1.getLeft() , оно все равно возвращает ноль.

Почему это?

Если я добавлю просмотр изображения через XML и вызову ‘getLeft()’ в onWindowFocusChanged() , это вернет правильное значение.

Ответ №1:

getLeft() вернет вам фактическое значение только после завершения шага компоновки и onLayout вашего Answer вызова. Итак, чтобы записать начальную позицию вашего представления, лучше сделать это в onLayout .

Теперь, говоря о onWindowFocusChanged() — документация не дает никаких обещаний относительно того, будет ли этот метод вызван до onLayout или после, поэтому это не лучшее место для записи начальной позиции вашего представления.