onResize не вызывается
Как написать виджет, который реагирует на изменение размера?
Следующее не работает. onResize() вызывается только один раз в начале. Последнее изменение размера окна браузера не вызывает вызова этого метода, несмотря на то, что размер DIV изменяется.
public class MyWidget extends SimpleLayoutPanel {
private Label label;
public MyWidget() {
label = new Label("A");
add(label);
}
@Override
public void onResize() {
super.onResize();
int width = label.getElement().getClientWidth();
int height = label.getElement().getClientHeight();
int fontsize = (width>height?height:width);
if( fontsize > 0 ) {
DOM.setStyleAttribute(label.getElement(), "font-size", Integer.toString(fontsize)+"px");
}
}
}
и основной модуль
public void onModuleLoad() {
MyWidget myWidget = new MyWidget();
DOM.setStyleAttribute(myWidget.getElement(), "position", "fixed");
DOM.setStyleAttribute(myWidget.getElement(), "top", "0px");
DOM.setStyleAttribute(myWidget.getElement(), "left", "0px");
DOM.setStyleAttribute(myWidget.getElement(), "bottom", "0px");
DOM.setStyleAttribute(myWidget.getElement(), "right", "0px");
RootPanel rootPanel = RootPanel.get();
rootPanel.add(myWidget);
}
ОБНОВЛЕНИЕ 1
Версия на основе ResizComposite также не работает. В этом случае onResize никогда не вызывается вообще.
public class MyWidget extends ResizeComposite {
private Label label;
public MyWidget() {
label = new Label("A");
DOM.setStyleAttribute(label.getElement(), "position", "fixed");
DOM.setStyleAttribute(label.getElement(), "top", "0px");
DOM.setStyleAttribute(label.getElement(), "left", "0px");
DOM.setStyleAttribute(label.getElement(), "bottom", "0px");
DOM.setStyleAttribute(label.getElement(), "right", "0px");
SimpleLayoutPanel simpleLayoutPanel = new SimpleLayoutPanel();
simpleLayoutPanel.add(label);
initWidget(simpleLayoutPanel);
}
@Override
public void onResize() {
int width = label.getElement().getClientWidth();
int height = label.getElement().getClientHeight();
int fontsize = (width>height?height:width);
if( fontsize > 0 ) {
DOM.setStyleAttribute(label.getElement(), "font-size", Integer.toString(fontsize)+"px");
}
super.onResize();
}
}
1 ответ
Решение
Вы должны добавить к ProvidesResize
виджет (RootLayoutPanel
, ResizeLayoutPanel
) или HeaderPanel
для RequiresResize
быть удостоенным чести. См. http://code.google.com/webtoolkit/doc/latest/DevGuideUiPanels.html