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 类创建窗口时,会直接使用 Flash Player 舞台并显示列表。若要向 NativeWindow 添加视觉对象,请将该对象添加到窗口舞台的显示列表或添加到舞台上的另一个显示对象容器。 HTML 窗口在创建 HTML 窗口时,可使用 HTML、CSS 和 JavaScript 来显示内容。若要向 HTML 窗口添加可视对象,请将该内容添加到 HTML DOM。HTML 窗口是一种特殊类别的 NativeWindow。AIR 主机定义 HTML 窗口中的 nativeWindow 属性,该属性提供对基础 NativeWindow 实例的访问。使用此属性可以访问此处所述的 NativeWindow 属性、方法和事件。 注: JavaScript Window 对象还具有用于脚本访问包含窗口的方法,例如 moveTo() 和 close()。如果多个方法均可用,您可以使用其中简便易用的方法。
本机窗口事件流本机窗口调度事件,以便通知感兴趣的组件将要发生或已发生重要更改。对于许多与窗口相关的事件的调度是成对进行的。第一个事件警告即将发生更改。第二个事件通知已完成更改。可以取消警告事件,但不能取消通知事件。以下序列说明在用户单击窗口的最大化按钮后发生的事件流:
控制本机窗口样式和行为的属性以下属性控制窗口的基本外观和行为:
创建窗口时,在传递到 window 构造函数的 NativeWindowInitOptions 对象上设置这些属性。AIR 从应用程序描述符中读取初始应用程序窗口的属性(不包括 type 属性,该属性无法在应用程序描述符中设置且始终设置为 normal)。窗口创建后将无法更改这些属性。 这些属性的一些设置互不兼容:在 transparent 为 true 或 type 为 lightweight 时,systemChrome 无法设置为 standard。 窗口类型AIR 窗口类型组合本机操作系统的镶边属性和可见性属性来创建三种功能类型的窗口。使用 NativeWindowType 类中定义的常量可引用代码中的类型名称。AIR 提供以下窗口类型:
窗口镶边窗口镶边是一组使用户可以在桌面环境中操作窗口的控件。镶边元素包括标题栏、标题栏按钮、边框和调整大小手柄。 系统镶边可以将 systemChrome 属性设置为 standard 或 none。选择 standard 系统镶边可为窗口提供一组由用户的操作系统创建和设置样式的标准控件。选择 none 可为窗口提供您自己的镶边。使用 NativeWindowSystemChrome 类中定义的常量可引用代码中的系统镶边设置。 系统镶边由系统管理。应用程序无法直接访问控件本身,但在使用控件时可以响应调度的事件。对窗口使用标准镶边时,transparent 属性必须设置为 false,type 属性必须设置为 normal 或 utility。 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 窗口容器:控制窗口镶边 窗口透明度若要允许窗口与桌面或其他窗口进行 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 操作系统中的视觉效果:
*Ubuntu(带有 Compiz 窗口管理器) 注: AIR 不支持以下系统镶边元素:Mac OS X 工具栏、Mac OS X 代理图标、Windows 标题栏图标以及替代系统镶边。
|
|