Надежно работает прослушиватель изменения размера на уровне окна:
Window.addResizeHandler(new WindowResizeHandler())
Ваш обработчик изменения размера будет вызываться, когда пользователь изменяет размер окна браузера:
public void onResize(ResizeEvent event)
Вы можете использовать event.getHeight()
и event.getWidth()
, чтобы получить обновленные размеры окна.
Поскольку вы получаете событие только для окна в целом, вам придется самостоятельно распространять компоненты, которые вы хотите выложить. Обычно я просто вызываю собственный метод doLayout()
. Этот метод даже не нуждается в высоте и ширине события изменения размера, поскольку, поскольку DLH уже комментирует, вы можете запросить большинство компонентов об их размерах, когда получите уведомление, и выполнить ваши вычисления с этим.
К сожалению, некоторые браузеры не очень часто делают onResize. Стараясь не сходить с ума от обновлений, они могут иногда удерживать событие в течение нескольких секунд, оставляя ваше приложение заметно уродливым, ожидая «правильного» макета. Таким образом, где это возможно, вы должны стараться оставить макет для CSS и, возможно, в зависимости от вашей позиции в войне «таблицы против CSS», таблицы.