Основные сведения о собственных окнах в AIR

Adobe AIR 1.0 и более поздних версий

Краткое описание работы с собственными окнами в AIR и примеры кода можно найти в следующих статьях по быстрому началу работы в центре Adobe Developer Connection:

AIR предоставляет удобный API-интерфейс окон для использования на различных платформах для создания собственных окон операционной системы при помощи методов программирования Flash®, Flex™ и HTML.

AIR предоставляет широкие возможности для разработки внешнего вида ваших приложений. Создаваемые окна могут выглядеть как стандартные приложения рабочего стола, отвечающие стилю Apple, реализованному на компьютерах Mac, соответствующие канонам Microsoft при работе в Windows, гармонично сочетающиеся с диспетчером окон Linux, причем все это реализуется без добавления каких-либо дополнительных платформенно-зависимых программных кодов. Вместо этого можно использовать расширяемый Chrome, предоставляемый платформой Flex, с изменяемыми обложками для создания собственного стиля, не зависимого от среды выполнения приложения. Можно даже нарисовать собственный Chrome окна с полной поддержкой прозрачности и полупрозрачности относительно рабочего стола при помощи векторных и растровых объектов. Надоели прямоугольные окна? Нарисуйте круглое.

Окна в AIR

Adobe AIR поддерживает три различных прикладных интерфейса программирования для работы с окнами.

  • Ориентированный на ActionScript класс NativeWindow предлагает прикладной интерфейс программирования для работы с окнами на самом нижнем уровне. Используйте класс NativeWindow в приложениях, создаваемых в средах ActionScript и Flash Professional. Рассмотрите возможность применения класса NativeWindow для определения окон, используемых в приложении.

  • В среде разработки HTML можно использовать класс JavaScript Window так же, как он применяется в веб-приложениях для обозревателя. Вызовы методов JavaScript Window перенаправляются к нижележащему объекту NativeWindow.

  • Классы mx:WindowedApplication и mx:Window инфраструктуры Flex обеспечивают «обертку» Flex для класса NativeWindow. Компонент WindowedApplication замещает компонент Application при создании приложения AIR с помощью Flex и всегда должен использоваться в качестве исходного окна в приложении Flex.

Окна ActionScript

При создании окон при помощи класса NativeWindow используйте рабочую область и список отображения Flash Player напрямую. Чтобы добавить визуальный объект в NativeWindow, добавьте объект в список отображения в рабочей области окна или в другой контейнер экранного объекта в рабочей области.

Окна HTML

При создании окон HTML для отображения содержимого используется HTML, CSS и JavaScript. Чтобы добавить визуальный объект в окно HTML, это содержимое добавляется в HTML DOM. Окна HTML представляют собой особую категорию NativeWindow. Главный узел AIR задает свойство nativeWindow для окон HTML, которое обеспечивает доступ к соответствующему экземпляру NativeWindow. При помощи этого свойства можно получить доступ к свойствам, методам и событиям NativeWindow, описанным здесь.

Примечание. Объект JavaScript Window также содержит методы для выполнения сценариев окон-контейнеров, например moveTo() и close() . Если доступны похожие методы, можно использовать тот, который является более удобным.

Окна платформы Flex

При создании окон при помощи Flex для заполнения окна обычно используются компоненты MXML. Чтобы добавить компонент Flex в окно, элемент компонента добавляется в MXML-определение окна. Для динамического добавления содержимого можно также использовать ActionScript. Компоненты mx:WindowedApplication и mx:Window представляют собой контейнеры Flex и могут непосредственно принимать компоненты Flex, тогда как объекты NativeWindow — не могут. При необходимости можно получить доступ к свойствам и методам NativeWindow при помощи объектов WindowedApplication и Window, используя свойство nativeWindow .

Начальное окно приложения

AIR автоматически создает первое окно приложения. AIR задает свойства и содержимое окна при помощи параметров, заданных элементом initialWindow файла дескриптора приложения.

Если основным содержимым является SWF-файл, AIR создает экземпляр NativeWindow, загружает SWF-файл и добавляет его в рабочую область окна. Если основным содержимым является файл HTML, AIR создает окно HTML и загружает файл HTML.

Классы собственных окон

API-интерфейс собственных окон содержит следующие классы:

Схема событий собственных окон

Собственные окна отправляют события соответствующим компонентам с целью их оповещения о предстоящем важном изменении или о том, что такое изменение уже произошло. Многие события, связанные с окнами, отправляются парами. Первое событие предупреждает о предстоящем изменении. Второе событие сообщает о том, что это изменение уже произошло. Предупреждающее событие можно отменить, а оповещающее событие — нет. Далее приводится последовательность событий, которая реализуется при нажатии пользователем на кнопку разворачивания окна.

  1. Объект NativeWindow отправляет событие displayStateChanging .

  2. Если ни один из зарегистрированных прослушивателей не отменяет это событие, окно разворачивается.

  3. Объект NativeWindow отправляет событие displayStateChange .

    Помимо этого объект NativeWindow также отправляет события, связанные с соответствующими изменениями размера и положения окна. Окно не отправляет предупреждающие события для таких изменений. Связанными событиями являются следующие:

    1. Событие move отправляется при перемещении верхнего левого угла окна в результате операции разворачивания.

    2. Событие resize отправляется при изменении размера окна в результате операции разворачивания.

    Объект NativeWindow отправляет схожую последовательность событий при сворачивании, восстановлении, закрытии, перемещении и изменении размера окна.

    Предупреждающие события отправляются, только если изменение было инициировано посредством Chrome окна или другого механизма, управляемого операционной системой. При вызове метода окна для изменения размера окна, его положения или состояния отображения окно отправляет только события, оповещающие о произошедшем изменении. При желании можно отправить предупреждающее событие при помощи метода окна dispatchEvent() и перед продолжением процесса изменения проверить, не было ли отменено предупреждающее событие.

    Дополнительные сведения о классах, методах, свойствах и событиях API-интерфейса окон см. в cправочнике ActionScript® 3.0 для платформы Adobe® Flash® Platform .

Свойства, управляющие стилем и поведением собственных окон

Следующие свойства управляют основным оформлением и поведением окна:

  • type

  • systemChrome

  • transparent

  • owner

При создании окна эти свойства задаются для объекта NativeWindowInitOptions, передаваемого конструктору окна. AIR считывает свойства начального окна приложения из дескриптора приложения. (Кроме свойства type , которое невозможно задать в дескрипторе приложения и которое всегда имеет значение normal .) Эти свойства невозможно изменить после создания окна.

Некоторые настройки этих свойств взаимно несовместимы: systemChrome не может иметь значение standard , когда свойство transparent имеет значение true или свойство type имеет значение lightweight .

Типы окон

Типы окон AIR сочетают в себе атрибуты Chrome и видимости собственной операционной системы для создания трех функциональных типов окон. При помощи констант, определенных в классе NativeWindowType, можно создавать ссылки на названия типов в коде. AIR предоставляет следующие типы окон:

Тип

Описание

Normal

Типичное окно. Окна типа normal имеют полноформатный стиль Chrome и отображаются на панели задач Windows и в меню окна в Mac OS X.

Utility

Палитра инструментов. Окна типа utility имеют более простую версию системного Chrome и не отображаются на панели задач Windows и в меню окон в Mac OS X.

Lightweight

Окна типа lightweight не имеют Chrome и не отображаются на панели задач Windows и в меню окон в Mac OS X. Кроме того, окна типа lightweight не имеют системного меню, вызываемого сочетанием клавиш Alt+Пробел, в Windows. Окна типа lightweight подходят для уведомлений и элементов управления типа «комбинированное окно», которые открывают кратковременную область отображения. Когда используется значение lightweight для свойства type , свойство systemChrome должно иметь значение none .

Chrome окна

Chrome окна состоит из набора элементов управления, при помощи которых пользователи управляют окном в среде рабочего стола. К элементам Chrome относятся: строка заголовка, кнопки строки заголовка, границы и индикатор изменения размера.

Системный Chrome

Свойству systemChrome можно присвоить значение standard или none . Системный Chrome standard обеспечивает окно набором стандартных элементов управления, созданных и стилизованных операционной системой пользователя. Выберите значение none , чтобы применить собственный Chrome к окну. При помощи констант, определенных в классе NativeWindowSystemChrome, можно создать ссылку на настройки системного Chrome в коде.

Системный Chrome управляется системой. Приложение не имеет прямого доступа к самим элементам управления, но может реагировать на события, отправляемые при использовании этих элементов управления. При использовании стандартного Chrome окна свойство transparent должно иметь значение false , а свойство type должно иметь значение normal или utility .

Chrome платформы Flex

При использовании компонентов Flex WindowedApplication или Window окно может иметь либо системную рамку, либо рамку, предоставляемую платформой Flex. Для использования Chrome платформы Flex задайте для свойства systemChrome , используемого при создании окна, значение none . При использовании во Flex 4 компонентов spark, а не mx необходимо указать класс обложки, чтобы использовать Chrome из Flex. Можно использовать встроенные обложки, или создать собственные. Следующий пример демонстрирует использование встроенного класса обложки WindowedApplication компонента spark для определения хрома окна:

<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
xmlns:s="library://ns.adobe.com/flex/spark" 
xmlns:mx="library://ns.adobe.com/flex/mx"> 
<fx:Style> 
@namespace "library://ns.adobe.com/flex/spark"; 
WindowedApplication 
{ 
    skinClass:ClassReference("spark.skins.spark.SparkChromeWindowedApplicationSkin"); 
} 
</fx:Style> 
</s:WindowedApplication>

Дополнительные сведения см. в документе Использование Flex 4: о контейнерах окон AIR: управление Chrome окна

Пользовательский Chrome

При создании окна без использования системного Chrome необходимо добавить собственные элементы управления рамки для осуществления взаимодействия пользователя с окном. Можно также создавать прозрачные, не прямоугольные окна.

Для использования пользовательского Chrome с компонентами mx:WindowedApplication или mx:Window необходимо задать для стиля showFlexChrome значение false . В противном случае среда Flex добавит собственный Chrome к вашим окнам.

Прозрачность окон

Для реализации альфа-наложения окна на поверхность рабочего стола или других окон необходимо задать для свойства transparent окна значение true . Значение свойства transparent должно быть задано до того, как окно будет создано, после чего его нельзя будет изменить.

Прозрачное окно не имеет фона по умолчанию. Любая область окна, не содержащая объект, нарисованный приложением, является невидимой. Если экранный объект имеет значение альфа меньше единицы, то сквозь него просвечивают другие экранные объекты в том же окне, другие окна и рабочий стол.

Прозрачные окна полезны при создании приложений с границами, имеющими неправильную форму, исчезающими или невидимыми. Визуализация больших областей альфа-наложения может осуществляться медленно, поэтому такой эффект следует применять умеренно.

Важная информация. В среде Linux события мыши не передаются через полностью прозрачные пиксели экрана. Поэтому не следует создавать окна с большими, полностью прозрачными областями, поскольку таким образом можно заблокировать доступ к другим окнам или экранным элементам, сделав их невидимыми для пользователя. В Mac OS X и Windows события мыши успешно передаются через прозрачные пиксели.

Прозрачность нельзя применить к окнам, имеющим системный Chrome. Кроме того, содержимое SWF и PDF в HTML может не отображаться в прозрачных окнах. Дополнительные сведения см. в разделе « Примечания по загрузке содержимого SWF или PDF на страницу HTML .

Статическое свойство NativeWindow.supportsTransparency сообщает о том, поддерживается ли прозрачность окна. Если прозрачность не поддерживается, приложение размещается на черном фоне. В таких случаях любые прозрачные области приложения отображаются непрозрачным черным. Оптимальным способом во время проверки этого свойства со значением false является определение возврата. Например, можно отобразить предупреждающее диалоговое окно или резервный прямоугольный непрозрачный пользовательский интерфейс.

Заметьте, что прозрачность всегда поддерживается операционными системами Mac и Windows. Поддержка операционной системы Linux требует использования диспетчера компоновки окон, но даже если диспетчер компоновки окон активен, не всегда можно реализовать прозрачность из-за пользовательских параметров экрана пользователя или конфигурации аппаратного обеспечения.

Прозрачность окон в MXML-приложении

По умолчанию фон MXML-окна непрозрачный, даже если окно создано как transparent . (Обратите внимание на эффект прозрачности в углах окна.) Чтобы обеспечить прозрачный фон окна, необходимо задать фоновый цвет и значение альфа в таблице стилей или элементе <mx:Style>, содержащемся в файле MXML приложения. Например, следующее объявление стиля придает фону слегка прозрачный зеленый оттенок:

WindowedApplication 
{ 
    background-alpha:".8"; 
    background-color:"0x448234"; 
}

Прозрачность окон в HTML-приложении

По умолчанию фон содержимого HTML, отображаемого в окнах HTML, и объектов HTMLLoader непрозрачный, даже если окно-контейнер прозрачное. Чтобы отключить фон, отображаемый по умолчанию для содержимого HTML, задайте для свойства paintsDefaultBackground значение false . Следующий пример создает HTMLLoader и отключает фон по умолчанию:

var htmlView:HTMLLoader = new HTMLLoader(); 
htmlView.paintsDefaultBackground = false;

В данном примере используется JavaScript для отключения фона по умолчанию окна HTML:

window.htmlLoader.paintsDefaultBackground = false;

Если для элемента документа HTML задать фоновый цвет, фон этого элемента не будет прозрачным. Установка значения частичной прозрачности (или непрозрачности) не поддерживается. Однако можно использовать прозрачную графику формата PNG в качестве фона страницы или элемента страницы для достижения подобного визуального эффекта.

Владение окном

Одно окно может быть владельцем одного или нескольких других окон. Подчиненные окна всегда отображаются на переднем плане основного окна, сворачиваются и восстанавливаются вместе с основным окном, и закрываются при закрытии основного окна. Окно-владелец не может быть перенесено в другое окно или удалено. Окно может принадлежать только одному основному окну, но может являться владельцем любого количества других окон.

Функция владения окнами позволяет упростить процедуру управления окнами, которые используются для палитр инструментов и диалоговых окон. Например, если диалоговое окно «Сохранить» отображается в окне документа, в результате назначения окна документа владельцем диалогового окна последнее автоматически будет оставаться перед окном документа.

Таблица визуальных эффектов окна

Следующая таблица иллюстрирует визуальные эффекты, достигаемые путем различных сочетаний настроек свойств окна в операционных системах Mac OS X, Windows и Linux:

Настройки окна

Mac OS X

Microsoft Windows

Linux *

Type: normal

SystemChrome: standard

Transparent: false

Type: utility

SystemChrome: standard

Transparent: false

Type: Any

SystemChrome: none

Transparent: false

Type: Any

SystemChrome: none

Transparent: true

mxWindowedApplication или mx:Window

Type: Any

SystemChrome: none

Transparent: true

* Ubuntu с диспетчером окон Compiz

Примечание. Следующие элементы системного Chrome не поддерживаются AIR: панель инструментов Mac OS X, значки-заменители Mac OS X, значки строки заголовка в Windows и альтернативный системный Chrome.