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.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 參數會判斷通知的急迫性:
建立沒有工作列按鈕或圖示的視窗在 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 停駐列上最小化,則不會移除停駐圖示。使用者仍然可以按一下圖示,讓視窗重新出現。 |
|