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 會選取最接近目前顯示大小的工作列圖示,只有在必要時才進行縮放。下列範例會使用兩種影像來設定工作列圖示的影像:

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

若要變更圖示影像,請將包含一個或多個新影像指定給 bitmaps 屬性。您可以變更影像來回應 enterFrame timer 事件,以產生動畫圖示。

若要從 Windows 和 Linux 上的通知區域移除圖示,或是在 Mac OS X 上還原預設圖示外觀,請將 bitmaps 設定為空陣列:

NativeApplication.nativeApplication.icon.bitmaps = []; 

停駐圖示

NativeApplication.supportsDockIcon true 時,AIR 支援停駐圖示。 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 時 (目前這是 Windows 和大部分 Linux 版本才有的情況),AIR 會支援系統匣圖示。在 Windows 和 Linux 中,系統匣圖示會顯示在工作列的通知區域。根據預設,不會顯示任何圖示。若要顯示圖示,請將包含 BitmapData 物件的陣列指定給圖示 bitmaps 屬性。若要變更圖示影像,請將包含新影像的陣列指定給 bitmaps 。若要移除圖示,請將 bitmaps 設定為 null

系統匣圖示選單

您可以建立 NativeMenu 物件並將該物件指定給 NativeApplication.nativeApplication.icon.menu 屬性,將選單加入系統匣圖示 (作業系統不提供預設選單)。用滑鼠右鍵按一下圖示,即可存取系統匣圖示選單。

系統匣圖示工具提示

設定工具提示屬性,即可將工具提示加入至圖示:

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

系統匣圖示事件

NativeApplication.nativeApplication.icon 屬性參考的 SystemTrayIcon 物件會為 click mouseDown mouseUp rightClick rightMouseDown rightMouseUp 事件傳送 ScreenMouseEvent。您可以搭配圖示選單使用這些事件,讓使用者能夠在沒有可見視窗時,與您的應用程式互動。

範例:建立沒有視窗的應用程式

下列範例會建立具有系統匣圖示,但沒有可見視窗的 AIR 應用程式。(應用程式的 visible 屬性在應用程式描述器中不可設為 true ,否則應用程式啟動時會看到視窗。

package 
{ 
    import flash.display.Loader; 
    import flash.display.NativeMenu; 
    import flash.display.NativeMenuItem; 
    import flash.display.NativeWindow; 
    import flash.display.Sprite; 
    import flash.desktop.DockIcon; 
    import flash.desktop.SystemTrayIcon; 
    import flash.events.Event; 
    import flash.net.URLRequest; 
    import flash.desktop.NativeApplication; 
 
    public class SysTrayApp extends Sprite 
    { 
        public function SysTrayApp():void{ 
            NativeApplication.nativeApplication.autoExit = false; 
            var icon:Loader = new Loader(); 
            var iconMenu:NativeMenu = new NativeMenu(); 
            var exitCommand:NativeMenuItem = iconMenu.addItem(new NativeMenuItem("Exit")); 
                exitCommand.addEventListener(Event.SELECT, function(event:Event):void { 
                    NativeApplication.nativeApplication.icon.bitmaps = []; 
                    NativeApplication.nativeApplication.exit(); 
                }); 
 
            if (NativeApplication.supportsSystemTrayIcon) { 
                NativeApplication.nativeApplication.autoExit = false; 
                icon.contentLoaderInfo.addEventListener(Event.COMPLETE, iconLoadComplete); 
                icon.load(new URLRequest("icons/AIRApp_16.png")); 
                 
                var systray:SystemTrayIcon =  
                    NativeApplication.nativeApplication.icon as SystemTrayIcon; 
                systray.tooltip = "AIR application"; 
                systray.menu = iconMenu; 
            } 
 
            if (NativeApplication.supportsDockIcon){ 
                icon.contentLoaderInfo.addEventListener(Event.COMPLETE,iconLoadComplete); 
                icon.load(new URLRequest("icons/AIRApp_128.png")); 
                var dock:DockIcon = NativeApplication.nativeApplication.icon as DockIcon;  
                dock.menu = iconMenu; 
            } 
        } 
         
        private function iconLoadComplete(event:Event):void 
        { 
            NativeApplication.nativeApplication.icon.bitmaps = 
                [event.target.content.bitmapData]; 
        } 
    } 
} 
備註: 使用 Flex WindowedApplication 組件時,您必須將 WindowedApplication 標籤的 visible 特質設為 false 。此特質會取代應用程式描述器中的設定。
備註: 此範例假定在應用程式的 icons 子目錄中有名為 AIRApp_16.png AIRApp_128.png 的影像檔案 (AIR SDK 中包含樣本圖示檔案,您可以將此檔案複製至專案資料夾中)。

視窗工作列圖示和按鈕

圖示化的視窗一般會顯示於工作列或停駐列的視窗區域,以便讓使用者輕鬆存取背景或將視窗最小化。Mac OS X 停駐列會顯示您應用程式的圖示,並顯示每個最小化視窗的圖示。Microsoft Windows 和 Linux 工作列會顯示按鈕,其中包含程式圖示和應用程式在每個一般類型視窗中的標題。

反白標示工作列視窗按鈕

當視窗位於背景中時,您可以通知使用者與視窗相關的關注事件已發生。在 Mac OS X 中,您可以透過應用程式停駐圖示跳躍來通知使用者 (如 讓停駐圖示跳躍 一節中所述)。在 Windows 和 Linux 上,您可以呼叫 NativeWindow 實體的 notifyUser() 方法,反白標示視窗工作列按鈕。傳遞至該方法的 type 參數會判斷通知的急迫性:

  • NotificationType.CRITICAL :視窗圖示會閃爍,直到使用者將視窗移到前景為止。

  • NotificationType.INFORMATIONAL :透過變更顏色來反白標示視窗圖示。

    備註: 在 Linux 上只會支援資訊類型的通知。不論傳遞哪一種類型的値給 notifyUser() 函數,都會製造相同的效果。

    下列陳述式會反白標示視窗的工作列按鈕:

    stage.nativeWindow.notifyUser(NotificationType.CRITICAL); 

    在不支援視窗層級通知的作業系統上呼叫 NativeWindow.notifyUser() 方法不會有任何作用。請使用 NativeWindow.supportsNotification 屬性來判斷是否支援視窗通知。

建立沒有工作列按鈕或圖示的視窗

在 Windows 作業系統上,用 utility lightweight 類型建立的視窗不會出現在工作列上。不可見的視窗也不會顯示在工作列上。

由於起始視窗必須為 normal 類型,若要建立不會在工作列中出現任何視窗的應用程式,必須關閉起始視窗或讓它保持為不可見。若要關閉應用程式中所有視窗而不終止應用程式,請將 NativeApplication 物件的 autoExit 屬性設定為 false ,再關閉最後一個視窗。若要完全避免起始視窗變成可見,請將 <visible>false</visible> 加入應用程式描述器檔案的 <initalWindow> 元素 (而不要將 visible 屬性設定為 true ,或呼叫視窗的 activate() 方法)。

在應用程式所開啟的新視窗中,將傳遞給視窗建構函式之 NativeWindowInitOption 物件的 type 屬性設定為 NativeWindowType.UTILITY NativeWindowType.LIGHTWEIGHT

在 Mac OS X 中,最小化的視窗會顯示於停駐工作列上。您可以隱藏視窗而不要將它最小化,以避免顯示最小化圖示。下列範例會偵聽 nativeWindowDisplayState 變更事件,並在視窗正進行最小化時,取消該事件;而處理常式會將視窗 visible 屬性設定為 false

private function preventMinimize(event:NativeWindowDisplayStateEvent):void{ 
    if(event.afterDisplayState == NativeWindowDisplayState.MINIMIZED){ 
        event.preventDefault(); 
        event.target.visible = false; 
    } 
} 

當您將 visible 屬性設定為 false 時,如果視窗已在 Mac OS X 停駐列上最小化,則不會移除停駐圖示。使用者仍然可以按一下圖示,讓視窗重新出現。