AIR 中的任务栏图标

Adobe AIR 1.0 和更高版本

很多操作系统都提供有任务栏(例如 Mac OS X 停靠栏),任务栏中可包含表示应用程序的图标。Adobe® AIR® 提供了一个接口,可以通过 NativeApplication.nativeApplication.icon 属性与应用程序任务栏图标进行交互。

关于任务栏图标

AIR 会自动创建 NativeApplication.nativeApplication.icon 对象。对象类型可以为 DockIcon 或 SystemTrayIcon,具体取决于操作系统。可以使用 NativeApplication.supportsDockIcon NativeApplication.supportsSystemTrayIcon 属性来确定 AIR 在当前操作系统上支持哪些 InteractiveIcon 子类。InteractiveIcon 基类提供了 width height bitmaps 属性,可以使用这些属性来更改图标所使用的图像。但是,在错误操作系统上访问特定于 DockIcon 或 SystemTrayIcon 的属性会生成运行时错误。

若要设置或更改图标所使用的图像,请创建一个包含一个或多个图像的数组,然后将该数组分配给 NativeApplication.nativeApplication.icon.bitmaps 属性。在不同操作系统上,任务栏图标的大小会有所不同。为了避免因缩放而导致图像质量降级,可以向 bitmaps 数组中添加多个不同大小的图像。如果提供多个图像,AIR 会选择大小与任务栏图标的当前显示大小最接近的图像,仅在需要时进行缩放。以下示例使用两个图像来设置任务栏图标的图像:

air.NativeApplication.nativeApplication.icon.bitmaps =  
            [bmp16x16.bitmapData, bmp128x128.bitmapData];

若要更改图标图像,请将包含新图像的数组分配给 bitmaps 属性。通过响应 enterFrame timer 事件来更改图像,可以为图标添加动画效果。

若要从 Windows 和 Linux 的通知区域中删除图标,或者恢复 Mac OS X 中的默认图标外观,请将 bitmaps 设置为空数组:

air.NativeApplication.nativeApplication.icon.bitmaps = [];

停靠栏图标

AIR 在 NativeApplication.supportsDockIcon true 时支持停靠栏图标。 NativeApplication.nativeApplication.icon 属性表示停靠栏上的应用程序图标(而不是窗口的停靠栏图标)。

注: AIR 不支持更改 Mac OS X 停靠栏上的窗口图标。此外,对应用程序的停靠栏图标所做的更改只有当应用程序运行时才会应用,应用程序终止时图标将还原为其正常外观。

停靠栏图标菜单

通过创建包含命令的 NativeMenu 对象并将其分配给 NativeApplication.nativeApplication.icon.menu 属性,可以向标准停靠栏菜单中添加命令。菜单中的项目显示在标准停靠栏图标菜单项的上方。

回弹停靠栏

通过调用 NativeApplication.nativeApplication.icon.bounce() 方法,可以回弹停靠栏图标。如果将 bounce() priority 参数设置为 informational,则图标将回弹一次。如果将该参数设置为 critical,则图标将始终保持回弹状态,直到用户激活该应用程序。用作 priority 参数的常量由 NotificationType 类定义。

注: 如果应用程序已经处于活动状态,则不会回弹图标。

停靠栏图标事件

单击停靠栏图标后,NativeApplication 对象将调度 invoke 事件。如果应用程序尚未运行,则系统将启动该应用程序。否则, invoke 事件将传送到正在运行的应用程序实例。

系统任务栏图标

NativeApplication.supportsSystemTrayIcon true 时,AIR 支持系统任务栏图标(目前只有 Windows 和大多数 Linux 发行版是这种情况)。在 Windows 和 Linux 中,系统任务栏图标显示在任务栏的通知区域中。 默认情况下不显示任何图标。要显示图标,请将包含 BitmapData 对象的数组分配给图标的 bitmaps 属性。若要更改图标图像,请将包含新图像的数组分配给 bitmaps 。若要删除图标,请将 bitmaps 设置为 null

系统任务栏图标菜单

通过创建 NativeMenu 对象并将其分配给 NativeApplication.nativeApplication.icon.menu 属性,可以向系统任务栏图标中添加菜单(操作系统不会提供任何默认菜单)。右键单击图标即可访问系统任务栏图标菜单。

系统任务栏图标工具提示

通过设置 tooltip 属性可以向图标添加工具提示:

air.NativeApplication.nativeApplication.icon.tooltip = "Application name";

系统任务栏图标事件

NativeApplication.nativeApplication.icon 属性引用的 SystemTrayIcon 对象可以为 click mouseDown mouseUp rightClick rightMouseDown rightMouseUp 事件调度 ScreenMouseEvent。可以组合使用这些事件和图标菜单,以便用户能够在您的应用程序没有可见窗口时与应用程序进行交互。

示例:创建不带任何窗口的应用程序

以下示例创建了一个具有系统任务栏图标但没有可见窗口的 AIR 应用程序。(在应用程序描述符中,不得将应用程序的 visible 属性设置为 true ,否则窗口在应用程序启动时可见。)

注: 使用 Flex WindowedApplication 组件时,必须将 WindowedApplication 标记的 visible 属性设置为 false 。该属性取代了应用程序描述符中的设置。
<html> 
<head> 
<script src="AIRAliases.js" language="JavaScript" type="text/javascript"></script> 
<script language="JavaScript" type="text/javascript"> 
    var iconLoadComplete = function(event) 
    { 
        air.NativeApplication.nativeApplication.icon.bitmaps = [event.target.content.bitmapData]; 
    } 
     
    air.NativeApplication.nativeApplication.autoExit = false; 
    var iconLoad = new air.Loader(); 
    var iconMenu = new air.NativeMenu(); 
    var exitCommand = iconMenu.addItem(new air.NativeMenuItem("Exit")); 
    exitCommand.addEventListener(air.Event.SELECT,function(event){ 
            air.NativeApplication.nativeApplication.icon.bitmaps = []; 
            air.NativeApplication.nativeApplication.exit(); 
    }); 
 
    if (air.NativeApplication.supportsSystemTrayIcon) { 
        air.NativeApplication.nativeApplication.autoExit = false; 
        iconLoad.contentLoaderInfo.addEventListener(air.Event.COMPLETE,iconLoadComplete); 
        iconLoad.load(new air.URLRequest("icons/AIRApp_16.png")); 
        air.NativeApplication.nativeApplication.icon.tooltip = "AIR application"; 
        air.NativeApplication.nativeApplication.icon.menu = iconMenu; 
    } 
 
    if (air.NativeApplication.supportsDockIcon) { 
        iconLoad.contentLoaderInfo.addEventListener(air.Event.COMPLETE,iconLoadComplete); 
        iconLoad.load(new air.URLRequest("icons/AIRApp_128.png")); 
        air.NativeApplication.nativeApplication.icon.menu = iconMenu; 
    } 
 
</script> 
</head> 
<body> 
</body> 
</html>
注: 该示例假设应用程序的 icons 子目录中存在名为 AIRApp_16.png AIRApp_128.png 的图像文件。(示例图标文件包含在 AIR SDK 中,您可以将这些文件复制到项目文件夹中。)

Window 任务栏图标和按钮

窗口的图标化表示形式通常显示在任务栏或停靠栏的窗口区域中,以便用户能够轻松访问后台窗口或最小化的窗口。Mac OS X 停靠栏会为您的应用程序显示一个图标,并为每个最小化的窗口分别显示一个图标。Microsoft Windows 和 Linux 任务栏显示一个按钮,其中包含您的应用程序中每个普通类型窗口的程序图标和标题。

加亮显示任务栏窗口按钮

如果窗口位于后台,则可以通知用户发生了与该窗口相关的需要关注的事件。在 Mac OS X 中,可以通过回弹应用程序的停靠栏图标来通知用户(如 回弹停靠栏 中所述)。在 Windows 和 Linux 中,可以通过调用 NativeWindow 实例的 notifyUser() 方法来加亮显示窗口的任务栏按钮。传递给该方法的 type 参数用于确定通知的紧急程度:

  • NotificationType.CRITICAL :在用户将窗口置于前台之前,窗口图标一直闪烁。

  • NotificationType.INFORMATIONAL :通过更改颜色来加亮显示窗口图标。

    注: 在 Linux 中,仅支持信息性类型的通知。向 notifyUser() 函数传递任何一种类型值都会产生相同的效果。

    以下语句加亮显示窗口的任务栏按钮:

    window.nativeWindow.notifyUser(air.NotificationType.INFORMATIONAL);

    在不支持窗口级别通知的操作系统中,调用 NativeWindow.notifyUser() 方法将不起作用。使用 NativeWindow.supportsNotification 属性可确定是否支持窗口通知。

创建不带任务栏按钮或图标的窗口

在 Windows 操作系统中,使用 utility lightweight 类型创建的窗口不会显示在任务栏中。不可见窗口也不会显示在任务栏中。

由于初始窗口必定为 normal 类型,因此要创建不会在任务栏中显示任何窗口的应用程序,必须关闭初始窗口或保持初始窗口不可见。若要关闭应用程序中的所有窗口而不终止应用程序,请在关闭最后一个窗口之前,将 NativeApplication 对象的 autoExit 属性设置为 false 。如果只是需要使初始窗口变得不可见,请向应用程序描述符文件的 <initalWindow> 元素添加 <visible>false</visible> (且不要将 visible 属性设置为 true 或调用窗口的 activate() 方法)。

在应用程序打开的新窗口中,将传递给窗口构造函数的 NativeWindowInitOption 对象的 type 属性设置为 NativeWindowType.UTILITY NativeWindowType.LIGHTWEIGHT

在 Mac OS X 中,最小化的窗口显示在停靠任务栏中。通过隐藏窗口而不是最小化窗口可以避免显示最小化的图标。以下示例侦听 nativeWindowDisplayState 更改事件,并在窗口最小化时取消该事件。处理函数会改为将窗口的 visible 属性设置为 false

function preventMinimize(event){ 
    if(event.afterDisplayState == air.NativeWindowDisplayState.MINIMIZED){ 
        event.preventDefault(); 
        event.target.visible = false; 
    } 
}

如果将 visible 属性设置为 false 后窗口最小化到 Mac OS X 停靠栏中,则无法删除该停靠栏图标。用户仍可单击图标来重新显示窗口。