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