AIR 窗体基础<o:p></o:p>
窗体API 包含下列类:<o:p></o:p>
Package | Classes |
---|---|
flash.display | NativeWindow, NativeWindowInitOptions 下面的类中定义了些Window字符常量:NativeWindowDisplayState, NativeWindowResize, NativeWindowSystemChrome |
flash.events | NativeWindowBoundsEvent, NativeWindowDisplayStateEvent, NativeWindowErrorEvent |
flash.system | NativeWindowCapabilities |
AIR提供了易用的,跨平台的窗体API,使用Flash, Flex, 和HTML编程技术创建本地操作系统窗体。<o:p></o:p>
用AIR,你可以很自由的创建应用程序的主题样式,创建的窗体看起来和标准桌面程序一样,在不同的操作系统上就有不同的系统窗体风格,或者使用皮肤,扩展窗体主题风格。你甚至可以用矢量图或位图绘制窗体。<o:p></o:p>
AIR支持两种不同类型的APIs用于创建窗体:面向Flash的NativeWindow类和面向HTML的JavaScript Window类。通过Flash stage和显示列表可直接用NativeWindow创建窗体。要添加可视化对象到NativeWindow上,需要添加对象到window's stage的显示列表上。使用HTML,CSS和JavaScript创建窗体来显示内容,如果要添加可视化对象到HTML窗体上,需要用DOM添加对象。<o:p></o:p>
以前的项目中的窗体都是通过AIR项目的描述文件自动创建的,因为已经指定了rootContent 元素属性值。如果根内容是一个SWF文件,则NativeWindow 被创建,SWF 被载入到窗体中。如果根内容为HTML文件,则HTML窗体被创建,HTML页被载入。<o:p></o:p>
Native windows使用基于事件驱动的编程模型。改变任何属性或调用窗体的方法都将影响显示或组件的行为。例如当系统按钮最大化按钮被点击时,下列事件将被触发:<o:p></o:p>
1. 用户点击了最大化按钮。<o:p></o:p>
2. 窗体发出一个displayStateChanging事件。<o:p></o:p>
3. 如果没有注册监听器取消事件,则窗体被最大化。<o:p></o:p>
4. displayStateChange事件通知监听器。<o:p></o:p>
另外,相关联的事件也会被触发:<o:p></o:p>
1. 如果窗体左上角坐标因为最大化而改变则发出move事件。<o:p></o:p>
2. 如果窗体大小因最大化发生变化则发出resize事件。<o:p></o:p>
类似的事件还有minimizing, restoring, closing, moving, resizing window.<o:p></o:p>
<o:p></o:p>
本地窗体的样式<o:p></o:p>
窗体的基本外观和样式取决于三个属性:type, systemChrome, 和transparent。Type属性设置窗体的功能。systemChrome属性设置窗体是否遵循操作系统窗体样式。Transparent属性设置是否支持alpha混合。这些属性都是设置在将被创建的窗体的NativeWindowInitOptions 对象上且不能被改变。自动创建的初始窗体是根据描述文件的这些属性值进行设置的,且type属性不能在描述文件中设置,其值都是normal。<o:p></o:p>
这些属性的设置有些是不兼容的,如当transparent 设置为true时或type为lightweight时systemChrome不能设置为standard 。<o:p></o:p>
<o:p></o:p>
窗体类型<o:p></o:p>
<o:p></o:p>
Type属性决定创建何种类型的窗体,且只有在创建新的NativeWindow.时可设置,AIR支持下列类型的窗体:<o:p></o:p>
Normal<o:p></o:p>
典型的窗体,Normal窗体具有操作系统普通窗体的功能。<o:p></o:p>
Utility<o:p></o:p>
一个面板窗体,Utility窗体是简化的窗体,且不显示在系统任务栏中。<o:p></o:p>
Lightweight<o:p></o:p>
Lightweight窗体也不显示在系统任务栏中,另外它没有系统菜单。它很适合做提示水泡窗体,当type设置为lightweight时,systemChrome 必须设置为"none".<o:p></o:p>
注意:在Beta版本中,模态窗体类型还不支持<o:p></o:p>
<o:p></o:p>
Window chrome<o:p></o:p>
<o:p></o:p>
Window chrome 是一组操作窗体的控件,作为AIR 程序window chrome有一下几种:<o:p></o:p>
System chrome<o:p></o:p>
System chrome 显示的窗体具有操作系统窗体一样的一组控件和样式。使用system chrome是AIR窗体和普通桌面程序具有一样的样式风格。System chrome是由系统管理的,你的程序不能直接访问这些控件,但可以处理这些控件发出的事件,如果窗体被设置为system chrome ,则transparency 属性必须为false 。<o:p></o:p>
<o:p></o:p>
Flex chrome<o:p></o:p>
当使用Flex WindowedApplication 和 Window组件时,窗体样式由Flex framework提供,如果Flex 组件在system chrome下使用,则Flex chrome 不会被显示。<o:p></o:p>
Custom chrome<o:p></o:p>
如果你创建的窗体没有system chrome且不使用Flex mx:WindowedApplication组件,你必须添加自己的控件处理用户和窗体的交互。这里你可以制作透明的,不规则的窗体。<o:p></o:p>
<o:p></o:p>
窗体透明<o:p></o:p>
<o:p></o:p>
要允许窗体与桌面环境进行alpha混合,需要设置窗体的transparent 属性为true。Transparent属性必须在窗体创建之前设置,且不能改变。该属性在NativeWindowInitOptions对象上。<o:p></o:p>
透明窗体在以下方面很有用:<o:p></o:p>
1. 程序边框为不规则图形<o:p></o:p>
2. 程序必须”淡出“或出现为不可视<o:p></o:p>
当窗体设置为system chrome.时透明不可用。<o:p></o:p>
<o:p></o:p>
MXML程序窗体的透明性<o:p></o:p>
<o:p></o:p>
如果Flex程序使用CSS 样式设置背景色或颜色,则窗体不会透明。<o:p></o:p>
Application <o:p></o:p>
{ <o:p></o:p>
background-image:""; <o:p></o:p>
background-color:""; <o:p></o:p>
} <o:p></o:p>
<o:p></o:p>
可视化窗体目录<o:p></o:p>
下面的表格说明不同的属性值影响窗体的视觉效果:<o:p></o:p>
Type | System Chrome | Transparent | Mac OS X | Microsoft Windows |
---|---|---|---|---|
Standard | normal | Not supported | ||
Utility | normal | Not supported | ||
Any | none | false | ||
Any | none | true | ||
Any | none | true | mx:WindowedApplication |
Beta版本的限制<o:p></o:p>
<o:p></o:p>
下面的特性在beta版本中还不支持:<o:p></o:p>
1. 窗体API 还不支持 Toolbars|OS X Toolbar 或 OS X Proxy Icon. <o:p></o:p>
2. 系统托盘图标<o:p></o:p>
3. 程序控制应用程序图标<o:p></o:p>
4. 桌面屏幕信息<o:p></o:p>
5. 本地窗体菜单 <o:p></o:p>