AIR 中的本机窗口的基础知识

Adobe AIR 1.0 和更高版本

有关在 AIR 中使用本机窗口的快速介绍和代码示例,请参阅 Adobe Developer Connection 中的以下快速入门文章:

AIR 提供易于使用的跨平台窗口 API,以便使用 Flash®、Flex™ 和 HTML 编程技术创建本机操作系统窗口。

使用 AIR 可使您在开发应用程序的外观时具有广泛的自由度。您创建的窗口可以类似于标准的桌面应用程序,也就是在 Mac 上运行时与 Apple 风格相媲美、在 Windows 上运行时符合 Microsoft 惯例以及在 Linux 上与窗口管理器协调一致,所有这些的实现都不需要撰写平台专用的代码。此外,无论应用程序运行于何处,都可以使用 Flex 框架提供的可设置外观、可扩展的镶边树立您自己的风格。由于完全支持针对桌面进行透明度和 Alpha 混合,因此甚至可以用矢量图和位图绘制您自己的窗口镶边。是否厌倦了矩形窗口?现在可以绘制圆形窗口。

AIR 中的窗口

AIR 支持三个不同的 API 来处理窗口:

  • 面向 ActionScript 的 NativeWindow 类提供最底层的窗口 API。在使用 ActionScript 和 Flash Professional 创作的应用程序中使用 NativeWindow。考虑扩展 NativeWindow 类,以使应用程序中使用的窗口专用化。

  • 在 HTML 环境中,可以使用 JavaScript Window 类,就像在基于浏览器的 Web 应用程序中的那样。对 JavaScript Window 方法的调用将转移到基础本机窗口对象。

  • Flex 框架 mx:WindowedApplication 和 mx:Window 类为 NativeWindow 类提供 Flex“包装”。用 Flex 创建 AIR 应用程序时,WindowedApplication 组件将代替 Application 组件,并且必须始终使用前者作为您的 Flex 应用程序的初始窗口。

ActionScript 窗口

使用 NativeWindow 类创建窗口时,会直接使用 Flash Player 舞台并显示列表。若要向 NativeWindow 添加视觉对象,请将该对象添加到窗口舞台的显示列表或添加到舞台上的另一个显示对象容器。

HTML 窗口

在创建 HTML 窗口时,可使用 HTML、CSS 和 JavaScript 来显示内容。若要向 HTML 窗口添加可视对象,请将该内容添加到 HTML DOM。HTML 窗口是一种特殊类别的 NativeWindow。AIR 主机定义 HTML 窗口中的 nativeWindow 属性,该属性提供对基础 NativeWindow 实例的访问。使用此属性可以访问此处所述的 NativeWindow 属性、方法和事件。

注: JavaScript Window 对象还具有用于脚本访问包含窗口的方法,例如 moveTo()close()。如果多个方法均可用,您可以使用其中简便易用的方法。

Flex Framework 窗口

使用 Flex 框架创建窗口时,通常使用 MXML 组件来填充该窗口。若要向窗口添加 Flex 组件,请将该组件元素添加到窗口 MXML 定义。还可以使用 ActionScript 来动态添加内容。mx:WindowedApplication 和 mx:Window 组件被设计为 Flex 容器,因此可以直接接受 Flex 组件,而 NativeWindow 对象无法直接接受 Flex 组件。在必要时,可以使用 nativeWindow 属性通过 WindowedApplication 和 Window 对象来访问 NativeWindow 属性和方法。

初始应用程序窗口

应用程序的第一个窗口是由 AIR 自动为您创建的。AIR 使用应用程序描述符文件的 initialWindow 元素中指定的参数设置该窗口的属性和内容。

如果根内容是 SWF 文件,则 AIR 将创建 NativeWindow 实例,加载 SWF 文件并将其添加到窗口舞台。如果根内容是 HTML 文件,则 AIR 将创建 HTML 窗口并加载 HTML。

本机窗口事件流

本机窗口调度事件,以便通知感兴趣的组件将要发生或已发生重要更改。对于许多与窗口相关的事件的调度是成对进行的。第一个事件警告即将发生更改。第二个事件通知已完成更改。可以取消警告事件,但不能取消通知事件。以下序列说明在用户单击窗口的最大化按钮后发生的事件流:

  1. NativeWindow 对象调度 displayStateChanging 事件。

  2. 如果已注册的侦听器均未取消该事件,则窗口将最大化。

  3. NativeWindow 对象调度 displayStateChange 事件。

    此外,NativeWindow 对象还调度对窗口大小和位置进行相关更改的事件。窗口不调度这些相关更改的警告事件。相关事件包括:

    1. move 事件,如果窗口的左上角由于最大化操作而发生移动,则调度该事件。

    2. resize 事件,如果窗口大小由于最大化操作而发生更改,则调度该事件。

    在最小化、还原、关闭、移动窗口和调整窗口大小时,NativeWindow 对象调度相似序列的事件。

    在通过窗口镶边或其他操作系统控制的机制启动更改时,仅调度警告事件。在调用窗口方法以更改窗口大小、位置或显示状态时,窗口仅调度通知更改的事件。如果需要,可以使用窗口 dispatchEvent() 方法调度警告事件,然后检查在继续进行更改之前是否取消了警告事件。

    有关窗口 API 类、方法、属性和事件的详细信息,请参阅用于 Adobe Flash Platform 的 ActionScript 3.0 参考

控制本机窗口样式和行为的属性

以下属性控制窗口的基本外观和行为:

  • type

  • systemChrome

  • transparent

  • owner

创建窗口时,在传递到 window 构造函数的 NativeWindowInitOptions 对象上设置这些属性。AIR 从应用程序描述符中读取初始应用程序窗口的属性(不包括 type 属性,该属性无法在应用程序描述符中设置且始终设置为 normal)。窗口创建后将无法更改这些属性。

这些属性的一些设置互不兼容:在 transparenttruetypelightweight 时,systemChrome 无法设置为 standard

窗口类型

AIR 窗口类型组合本机操作系统的镶边属性和可见性属性来创建三种功能类型的窗口。使用 NativeWindowType 类中定义的常量可引用代码中的类型名称。AIR 提供以下窗口类型:

类型

说明

Normal(普通)

典型窗口。普通窗口使用标准尺寸样式的镶边,并显示在 Windows 的任务栏中和 Mac OS X 的窗口菜单中。

Utility(实用程序)

工具面板。实用程序窗口使用较细的系统镶边,而且不显示在 Windows 的任务栏中和 Mac OS X 的窗口菜单中。

Lightweight(简单)

简单窗口没有镶边,而且不显示在 Windows 的任务栏中和 Mac OS X 的窗口菜单中。此外,Windows 中的简单窗口没有“系统”(Alt+Space) 菜单。简单窗口适用于通知气泡和控件,例如用于打开短期显示区域的组合框。在使用的 type 为简单时,systemChrome 必须设置为 none

窗口镶边

窗口镶边是一组使用户可以在桌面环境中操作窗口的控件。镶边元素包括标题栏、标题栏按钮、边框和调整大小手柄。

系统镶边

可以将 systemChrome 属性设置为 standardnone。选择 standard 系统镶边可为窗口提供一组由用户的操作系统创建和设置样式的标准控件。选择 none 可为窗口提供您自己的镶边。使用 NativeWindowSystemChrome 类中定义的常量可引用代码中的系统镶边设置。

系统镶边由系统管理。应用程序无法直接访问控件本身,但在使用控件时可以响应调度的事件。对窗口使用标准镶边时,transparent 属性必须设置为 falsetype 属性必须设置为 normalutility

Flex 镶边

在使用 Flex WindowedApplication 或 Window 组件时,窗口可以使用系统镶边或 Flex 框架提供的镶边。若要使用 Flex 镶边,请将用于创建该窗口的 systemChrome 属性设置为 none。当使用 Flex 4 spark 组件而不是 mx 组件时,必须指定外观类才能使用 Flex 镶边。您可以使用内置外观或提供您自己的外观。以下示例演示了如何使用内置 spark WindowedApplication 外观类来提供窗口镶边:

<?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 窗口容器:控制窗口镶边

自定义镶边

创建不带系统镶边的窗口时,您必须添加自己的镶边控件才能处理用户和该窗口之间的交互。还可以根据需要随意创建透明的非矩形窗口。

若要与 mx:WindowedApplication 或 mx:Windows 组件一起使用自定义镶边,必须将 showFlexChrome 样式设置为 false。否则,Flex 会将自己的镶边添加到您的窗口。

窗口透明度

若要允许窗口与桌面或其他窗口进行 Alpha 混合,请将该窗口的 transparent 属性设置为 true。必须在创建窗口之前设置 transparent 属性,否则将无法更改该属性。

透明窗口没有默认背景。不包含应用程序所绘制对象的任何窗口区域都不可见。如果所显示对象的 Alpha 设置小于 1,则该对象下方的任何内容都会显示出来,包括同一窗口中的其他显示对象、其他窗口和桌面。

在希望创建具有不规则形状边框、“淡出”边框或显示为不可见的边框的应用程序时,透明窗口非常有用。然而,呈现经过 Alpha 混合的较大区域可能会很慢,因此应谨慎使用该效果。

重要说明: 在 Linux 中,不能穿过完全透明的像素传递鼠标事件。 应避免用完全透明的大型区域创建窗口,因为可能会在无法察觉的情况下阻止用户访问其他窗口或其桌面上的项目。 在 Mac OS X 和 Windows 中,可以穿过完全透明的像素传递鼠标事件。

不能对具有系统镶边的窗口使用透明度。此外,透明窗口中不能显示 HTML 中的 SWF 和 PDF 内容。有关详细信息,请参阅在 HTML 页中加载 SWF 或 PDF 内容时的注意事项

静态 NativeWindow.supportsTransparency 属性可报告窗口透明度是否可用。在不支持透明度时,应用程序将与黑色背景合成。在这些情况下,应用程序的任何透明区域都显示为不透明的黑色。这种做法可以很好地应对万一此属性测试失败而需要回退的情况。例如,您可以向用户显示警告对话框,或显示矩形非透明用户界面。

请注意,Mac 和 Windows 操作系统始终支持透明度。支持 Linux 操作系统需要使用合成窗口管理器,但即使有合成窗口管理器处于活动状态,透明度也可能因用户显示选项或硬件配置而不可用。

MXML 应用程序窗口中的透明度

默认情况下,即使将窗口创建为 transparent,MXML 窗口的背景也是不透明的。(请注意窗口各个角的透明度效果。)若要显示窗口的透明背景,请设置样式表中的背景颜色和 Alpha 值或应用程序 MXML 文件中包含的 <mx:Style> 元素。例如,以下样式声明使背景具有略微透明的绿色阴影:

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

HTML 应用程序窗口中的透明度

默认情况下,即使包含窗口是透明的,HTML 窗口和 HTMLLoader 对象中所显示的 HTML 内容的背景也是不透明的。若要关闭为 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 窗口管理器)

注: AIR 不支持以下系统镶边元素:Mac OS X 工具栏、Mac OS X 代理图标、Windows 标题栏图标以及替代系统镶边。