Taskleisten-Symbol in AIR

Adobe AIR 1.0 und höher

Viele Betriebssysteme bieten eine Taskleiste, wie etwa das Mac OS X-Dock, in der eine Anwendung durch ein Symbol dargestellt wird. Adobe® AIR® bietet mithilfe der NativeApplication.nativeApplication.icon-Eigenschaft eine Schnittstelle zur Interaktion mit Anwendungssymbolen in der Taskleiste.

Taskleisten-Symbole

AIR erstellt automatisch das NativeApplication.nativeApplication.icon-Objekt. Je nach Betriebssystem handelt es sich beim Objekttyp entweder um „DockIcon“ oder „SystemTrayIcon“. Mithilfe der NativeApplication.supportsDockIcon- und NativeApplication.supportsSystemTrayIcon-Eigenschaften können Sie feststellen, welche dieser InteractiveIcon-Unterklassen von AIR auf dem aktuellen Betriebssystem unterstützt wird. Die InteractiveIcon-Basisklasse bietet die Eigenschaften width, height und bitmaps, mit der Sie das für das Symbol verwendete Bild ändern können. Wenn Sie jedoch eine für „DockIcon“ oder „SystemTrayIcon“ spezifische Eigenschaft auf dem falschen Betriebssystem aufrufen, kommt es zu einem Laufzeitfehler.

Um das für ein Symbol verwendete Bild festzulegen oder zu ändern, erstellen Sie ein Array, das ein oder mehrere Bilder enthält, und weisen es der NativeApplication.nativeApplication.icon.bitmaps-Eigenschaft zu. Die Größe der Taskleisten-Symbole kann sich von Betriebssystem zu Betriebssystem unterscheiden. Eine Verschlechterung des Bildes aufgrund von Skalierung können Sie vermeiden, indem Sie Bilder in mehreren Größen zum bitmaps-Array hinzufügen. Wenn Sie mehrere Bilder hinzugefügt haben, wird von AIR automatisch die Größe ausgewählt, die der gegenwärtigen Anzeigegröße des Taskleisten-Symbols am nächsten kommt. Eine Skalierung wird nur bei Bedarf vorgenommen. Im folgenden Beispiel wird das Bild für ein Taskleisten-Symbol mit zwei Bildern festgelegt:

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

Um das Bild des Symbols zu ändern, weisen Sie der bitmaps-Eigenschaft ein Array zu, das das neue Bild oder die neuen Bilder enthält. Sie können das Symbol animieren, indem Sie das Bild auf ein enterFrame- oder timer-Ereignis hin ändern.

Weisen Sie der bitmaps-Eigenschaft ein leeres Array zu, um das Symbol unter Windows oder Linux aus dem Infobereich zu entfernen oder unter Mac OS X das Standarderscheinungsbild des Symbols wiederherzustellen:

NativeApplication.nativeApplication.icon.bitmaps = []; 

Dock-Symbole

AIR unterstützt Dock-Symbole, wenn die NativeApplication.supportsDockIcon-Eigenschaft den Wert true hat. Die NativeApplication.nativeApplication.icon-Eigenschaft stellt das Anwendungssymbol im Dock dar (kein Fenster-Dock-Symbol).

Hinweis: Unter Mac OS X wird das Ändern von Fenstersymbolen im Dock von AIR nicht unterstützt. Außerdem wirken sich die Änderungen an einem Anwendungssymbol im Dock nur aus, während die Anwendung ausgeführt wird; das normale Erscheinungsbild des Symbols wird wiederhergestellt, wenn die Anwendung beendet wird.

Dock-Symbolmenüs

Sie können dem standardmäßigen Dock-Menü Befehle hinzufügen, indem Sie ein NativeMenu-Objekt, das die Befehle enthält, erstellen und der NativeApplication.nativeApplication.icon.menu-Eigenschaft zuweisen. Elemente im Menü werden über den standardmäßigen Dock-Symbolmenüelementen angezeigt.

Springen des Dock-Symbols

Durch Aufrufen der NativeApplication.nativeApplication.icon.bounce()-Methode können Sie das Dock-Symbol zum Springen veranlassen. Wenn Sie den bounce() priority-Parameter auf „informational“ einstellen, springt das Symbol einmal. Wenn Sie es auf „critical“ einstellen, springt das Symbol, bis der Benutzer die Anwendung aktiviert. Konstanten für den priority-Parameter sind in der NotificationType-Klasse definiert:

Hinweis: Ist die Anwendung bereits aktiv, springt das Symbol nicht.

Dock-Symbolereignisse

Wird auf das Dock-Symbol geklickt, löst das NativeApplication-Objekt ein invoke-Ereignis aus. Falls die Anwendung nicht ausgeführt wird, wird sie vom System gestartet. Andernfalls wird das invoke-Ereignis an die ausgeführte Anwendungsinstanz gesendet.

Infobereich-Symbole

AIR unterstützt Infobereich-Symbole, wenn NativeApplication.supportsSystemTrayIcon auf true eingestellt ist; gegenwärtig ist dies nur unter Windows und den meisten Linux-Distributionen der Fall. Unter Windows und Linux werden Infobereich-Symbole im Infobereich der Taskleiste angezeigt. Standardmäßig wird kein Symbol angezeigt. Um ein Symbol anzuzeigen, weisen Sie der bitmaps-Eigenschaft ein Array zu, das BitmapData-Objekte enthält: Um das Bild des Symbols zu ändern, weisen Sie der bitmaps-Eigenschaft ein Array zu, das die neuen Bilder enthält. Stellen Sie bitmaps auf null ein, um das Symbol zu entfernen.

Infobereich-Symbolmenüs

Sie können dem Infobereich-Symbol ein Menü hinzufügen, indem Sie ein NativeMenu-Objekt erstellen und es der NativeApplication.nativeApplication.icon.menu-Eigenschaft zuweisen (vom Betriebssystem wird kein Standardmenü bereitgestellt). Klicken Sie mit der rechten Maustaste auf das Symbol, um das Infobereich-Symbolmenü aufzurufen.

QuickInfos zu Infobereich-Symbolen

Fügen Sie einem Symbol eine QuickInfo hinzu, indem Sie die tooltip-Eigenschaft wie folgt einstellen:

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

Ereignisse von Infobereich-Symbolen

Das SystemTrayIcon-Objekt, auf das die NativeApplication.nativeApplication.icon-Eigenschaft verweist, löst ein „ScreenMouseEvent“ für click-, mouseDown-, mouseUp-, rightClick-, rightMouseDown- und rightMouseUp-Ereignisse aus. Mithilfe dieser Ereignisse und einem Symbolmenü können Sie Benutzern die Interaktion mit Ihrer Anwendung ermöglichen, wenn sie keine sichtbaren Fenster hat.

Beispiel: Erstellen einer Anwendung ohne Fenster

Im folgenden Beispiel wird eine AIR-Anwendung erstellt, die über ein Infobereich-Symbol, aber keine sichtbaren Fenster verfügt. (Die visible-Eigenschaft der Anwendung darf im Anwendungsdeskriptor nicht auf true gesetzt werden, andernfalls ist das Fenster beim Starten der Anwendung sichtbar.)

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]; 
        } 
    } 
} 
Hinweis: Wenn Sie mit der Flex WindowedApplication-Komponente arbeiten, müssen Sie das visible-Attribut des WindowedApplication-Tags auf false setzen. Dieses ersetzt die Einstellung im Anwendungsdeskriptor.
Hinweis: Bei diesem Beispiel wird davon ausgegangen, dass es die Bilddateien AIRApp_16.png und AIRApp_128.png in einem icons-Unterverzeichnis der Anwendung gibt. (Beispieldateien für Symbole, die Sie in Ihren Projektordner kopieren können, sind im AIR SDK enthalten.)

Taskleisten-Symbole und -Schaltflächen für Fenster

Symboldarstellungen von Fenstern werden in der Regel im Fensterbereich einer Taskleiste oder eines Docks angezeigt, um Benutzern einen einfachen Zugriff auf Fenster im Hintergrund oder minimierte Fenster zu ermöglichen. Im Mac OS X-Dock wird sowohl ein Symbol für die Anwendung als auch ein Symbol für jedes minimierte Fenster angezeigt. In der Taskleiste von Microsoft Windows und Linux wird eine Schaltfläche angezeigt, die das Programmsymbol und den Programmnamen für jedes Fenster vom Typ „normal“ in der Anwendung enthält.

Hervorheben der Fensterschaltfläche in der Taskleiste

Wenn sich ein Fenster im Hintergrund befindet, können Sie den Benutzer informieren, dass im Zusammenhang mit diesem Fenster ein Ereignis aufgetreten ist. Unter Mac OS X können Sie den Benutzer durch ein Springen des Anwendungssymbols im Dock informieren (siehe Springen des Dock-Symbols). Unter Windows und Linux können Sie die Fensterschaltfläche in der Taskleiste hervorheben, indem Sie die notifyUser()-Methode der NativeWindow-Instanz aufrufen. Mit dem an die Methode übergebenen type-Parameter wird die Dringlichkeit der Benachrichtigung bestimmt:

  • NotificationType.CRITICAL: Das Fenster-Symbol blinkt, bis der Benutzer das Fenster in den Vordergrund stellt.

  • NotificationType.INFORMATIONAL: Das Fenster-Symbol wird durch Änderung der Farbe hervorgehoben.

    Hinweis: Unter Linux werden nur informative Benachrichtigungen unterstützt. Wenn Sie einen Wert des einen oder anderen Typs an die notifyUser()-Funktion übergeben, wird derselbe Effekt erzielt.

    Mit der folgenden Anweisung wird die Schaltfläche eines Fensters in der Taskleiste hervorgehoben:

    stage.nativeWindow.notifyUser(NotificationType.CRITICAL); 

    Wird die NativeWindow.notifyUser()-Methode unter einem Betriebssystem aufgerufen, dass die Benachrichtigung auf Fensterebene nicht unterstützt, hat dieser Aufruf keine Wirkung. Mithilfe der NativeWindow.supportsNotification-Eigenschaft können Sie feststellen, ob diese Art der Benachrichtigung unterstützt wird.

Erstellen von Fenstern ohne Schaltflächen oder Symbolen in der Taskleiste

Unter Windows werden Fenster, die mit den Typen utility oder lightweight erstellt wurden, nicht in der Taskleiste angezeigt. Unsichtbare Fenster werden ebenfalls nicht in der Taskleiste angezeigt.

Da das erste Fenster zwangsläufig den Typ normal aufweist, müssen Sie dieses erste Fenster schließen oder unsichtbar belassen, wenn Sie eine Anwendung erstellen möchten, deren Fenster nicht in der Taskleiste angezeigt werden. Um alle Fenster in der Anwendung zu schließen, ohne die Anwendung zu beenden, müssen Sie die autoExit-Eigenschaft des NativeApplication-Objekts auf false einstellen, bevor Sie das letzte Fenster schließen. Um zu verhindern, dass das erste Fenster jemals sichtbar wird, fügen Sie <visible>false</visible> zum <initalWindow>-Element der Anwendungsdeskriptordatei hinzu. Außerdem sollten Sie die visible-Eigenschaft nicht auf true einstellen oder die activate()-Methode des Fensters aufrufen.

Stellen Sie in neuen, von der Anwendung geöffneten Fenstern die type-Eigenschaft des NativeWindowInitOption-Objekts, das an den Fensterkonstruktor übergeben wird, auf NativeWindowType.UTILITY oder NativeWindowType.LIGHTWEIGHT ein.

Unter Mac OS X werden minimierte Fenster in der Dock-Taskleiste angezeigt. Sie können die Anzeige des minimierten Symbols vermeiden, indem Sie das Fenster nicht minimieren, sondern ausblenden. Im folgenden Beispiel wird auf ein nativeWindowDisplayState-Änderungsereignis gewartet; es wird abgebrochen, falls das Fenster minimiert wird. Stattdessen stellt die Prozedur die visible-Eigenschaft des Fensters auf false ein:

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

Wird ein Fenster im Mac OS X-Dock minimiert angezeigt, wenn Sie die visible-Eigenschaft auf false einstellen, dann wird das Dock-Symbol nicht entfernt. Ein Benutzer kann nach wie vor auf das Symbol klicken, um das Fenster wieder anzuzeigen.