許多作業系統 (例如 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 停駐列上最小化,則不會移除停駐圖示。使用者仍然可以按一下圖示,讓視窗重新出現。
|
|
|