Lo que funciona de forma fiable es el oyente-nivel de la ventana de cambio de tamaño:
Window.addResizeHandler(new WindowResizeHandler())
Su manejador de cambio de tamaño se llama cuando el usuario cambia el tamaño de la ventana del navegador:
public void onResize(ResizeEvent event)
Puede utilizar event.getHeight()
y event.getWidth()
a obtener las dimensiones de la ventana actualizada.
Como solo obtendrá el evento para la ventana como un todo, tendrá que hacer su propia propagación a los componentes que desea diseñar. Por lo general, solo llamo al método doLayout()
. Este método ni siquiera necesita el alto y el ancho del evento de redimensionamiento porque, como DLH ya comenta, puede solicitar la mayoría de los componentes para sus dimensiones cuando se le notifique, y hacer sus cálculos con eso.
Desafortunadamente, algunos buscadores no hacen la cosa onResize con mucha frecuencia. Al tratar de no volverse loco con las actualizaciones, a veces pueden aferrarse al evento por algunos segundos, dejando su aplicación visiblemente fea mientras espera el diseño "correcto". Por lo tanto, cuando sea posible, debe intentar dejar el diseño en CSS y posiblemente, dependiendo de su postura en las tablas de guerra "tables vs. CSS".
En última instancia, quiero ajustar el tamaño del navegador según los cambios en VerticalPanel (un tipo de función de ajuste automático que debo implementar). Estos cambios están principalmente impulsados por el cambio de tamaño de widgets que están contenidos en VerticalPanel. Por ejemplo, tengo un widget TreeGrid con filas plegables. Si el usuario expande/contrae una fila, cambia la altura del contenedor. Creo que podría seguir su consejo y extender VerticalPanel para escuchar los cambios en los widgets que se agregan. Pero el problema es que no hay una función para obtener la altura del panel en píxeles (al menos que yo sepa). – P4ndaman
Simplemente llama a getOffsetHeight() desde la clase UIObject para obtener la altura en píxeles. – DLH
Heh acaba de enterarse de eso, gracias sin embargo. – P4ndaman