Автоматическое изменение размера содержимого нового окна AIR Window

AIR spark.components.WindowedApplication автоматически изменяет размер своего содержимого, когда я вручную растягиваю границы окна или максимизирую/восстанавливаю его. Но класс spark.components.Window не предоставляет такой функциональности «из коробки»: содержимое окна не меняет свой размер, когда я растягиваю/разворачиваю/восстанавливаю окно, когда соответствующий экземпляр spark.components.Window.nativeWindow изменяет свои границы. Мое приложение AIR требуется для открытия нескольких окон, причем с изменяемым размером. Как я могу заставить их автоматически изменять размер своего содержимого в соответствии с границами nativeWindow?


person Hunternif    schedule 28.05.2012    source источник


Ответы (2)


Предполагая, что вы имеете в виду spark.components.Window, это основано на skinnablecontainer, поэтому не должно быть ничего, что мешало бы вам использовать макет/ограничение на основе процентов.

<s:Window xmlns:fx="http://ns.adobe.com/mxml/2009" 
          xmlns:s="library://ns.adobe.com/flex/spark" 
          xmlns:mx="library://ns.adobe.com/flex/mx" 
          width="100%" height="100%">

Другие методы ручной обработки такого рода вещей включают прослушивание ResizeEvent, поступающего со сцены.

person Mike Petty    schedule 29.05.2012
comment
К сожалению, процентная ширина и высота не работают с spark.components.Window, как мы ожидали - просто ничего не происходит. Добавление EventListener для Event.RESIZE в stage хорошо работает для увеличения размера окна. Когда я пытаюсь уменьшить размер окна, оно дергается, но не изменяет размер. Мой код для слушателя: private function onStageResize(event:Event):void { width = stage.width; height = stage.height; } - person Hunternif; 01.06.2012
comment
Спасибо, Майк, теперь я понял, как правильно прослушивать событие изменения размера. - person Hunternif; 06.08.2012

Решение состоит в том, чтобы прослушивать событие RESIZE, поступающее от NativeWindow, а затем вручную устанавливать stageWidth и stageHeight в экземпляре stage окна. См. код ниже.

override public function open(openWindowActive:Boolean=true):void {
    super.open(openWindowActive);

    if (nativeWindow) {
        chromeWidth = nativeWindow.width - this.width;
        chromeHeight = nativeWindow.height - this.height;
        nativeWindow.addEventListener(NativeWindowBoundsEvent.RESIZE, onNativeResize);
    }
}

private function onNativeResize(event:NativeWindowBoundsEvent):void {
    stage.stageWidth = event.afterBounds.width - chromeWidth;
    stage.stageHeight = event.afterBounds.height - chromeHeight;
}
person Hunternif    schedule 06.08.2012