Icone della barra delle applicazioni in AIR

Adobe AIR 1.0 e versioni successive

Numerosi sistemi operativi forniscono una barra delle applicazioni, ad esempio il dock Mac OS X, che può contenere un'icona per rappresentare un'applicazione. Adobe® AIR® fornisce un'interfaccia per l'interazione con l'icona della barra delle applicazioni tramite la proprietà NativeApplication.nativeApplication.icon .

Informazioni sulle icone della barra delle applicazioni

AIR consente di creare automaticamente gli oggetti NativeApplication.nativeApplication.icon . Il tipo di oggetto è DockIcon o SystemTrayIcon, in base al sistema operativo utilizzato. Potete determinare quali di queste sottoclassi InteractiveIcon sono supportate da AIR sul sistema operativo corrente utilizzando le proprietà NativeApplication.supportsDockIcon e NativeApplication.supportsSystemTrayIcon . La classe base InteractiveIcon fornisce le proprietà width , height e bitmaps che potete utilizzare per modificare l'immagine utilizzata per l'icona. Tuttavia, l'accesso a proprietà specifiche di DockIcon o SystemTrayIcon sul sistema operativo errato genera un errore di runtime.

Per impostare o modificare l'immagine utilizzata per un'icona, potete creare un array contenente una o più immagini e assegnarlo alla proprietà NativeApplication.nativeApplication.icon.bitmaps . Le dimensioni delle icone della barra delle applicazioni possono essere diverse su sistemi operativi diversi. Per evitare la perdita di qualità delle immagini causata dal ridimensionamento, potete aggiungere immagini di diverse dimensioni all'array bitmaps . In questo caso, AIR seleziona la dimensione più simile a quella utilizzata per visualizzare l'icona della barra delle applicazioni corrente, ridimensionandola solo se necessario. L'esempio seguente imposta l'immagine per un'icona della barra delle applicazioni utilizzando due immagini:

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

Per modificare l'immagine dell'icona, assegnate un array contenente la nuova immagine, o le immagini, alla proprietà bitmaps . Potete animare l'icona modificando l'immagine in risposta a un evento enterFrame o timer .

Per rimuovere l'icona dall'area di notifica di Windows e Linux, o ripristinare l'aspetto predefinito dell'icona in Mac OS X, impostate bitmaps su un array vuoto:

NativeApplication.nativeApplication.icon.bitmaps = []; 

Icone del dock

AIR include il supporto per le icone del dock quando la proprietà NativeApplication.supportsDockIcon è impostata su true . La proprietà NativeApplication.nativeApplication.icon rappresenta l'icona dell'applicazione sul dock (non un'icona del dock della finestra).

Nota: AIR non include il supporto per la modifica delle icone della finestra sul dock in Mac OS X. Inoltre, le modifiche all'icona del dock dell'applicazione possono essere applicate solo quando un'applicazione è in esecuzione; al termine dell'applicazione viene ripristinato l'aspetto originale dell'icona.

Menu delle icone del dock

Per aggiungere comandi al menu del dock standard, potete creare un oggetto NativeMenu contenente i comandi e assegnarlo alla proprietà NativeApplication.nativeApplication.icon.menu . Le voci nel menu vengono visualizzate sopra le voci di menu dell'icona del dock standard.

Movimento sul dock

Per muovere l'icona del dock, potete chiamare il metodo NativeApplication.nativeApplication.icon.bounce() . Impostando il parametro bounce() priority su informational, l'icona si muove una volta. Impostando il parametro su critical, l'icona si muove fino a quando l'utente non attiva applicazione. Le costanti per il parametro priority sono definite nella classe NotificationType.

Nota: se l'applicazione è già attiva, l'icona non si muove.

Eventi dell'icona del dock

Quando si fa clic sull'icona del dock, l'oggetto NativeApplication invia un evento invoke . L'applicazione viene avviata dal sistema, se non è già in esecuzione. In caso contrario, l'evento invoke viene inviato all'istanza dell'applicazione in esecuzione.

Icone della barra delle applicazioni

AIR supporta le icone della barra delle applicazioni se la proprietà NativeApplication.supportsSystemTrayIcon è impostata su true . Questa situazione si verifica solo in Windows e nella maggior parte delle distribuzioni Linux. In Windows e Linux le icone della barra delle applicazioni sono visualizzate nell'area di notifica della barra delle applicazioni. Per impostazione predefinita non è visualizzata nessuna icona. Per mostrare un'icona, assegnate un array contenente oggetti BitmapData alla proprietà bitmaps dell'icona. Per modificare l'immagine dell'icona, assegnate un array contenente le nuove immagini a bitmaps . Per rimuovere l'icona, impostate bitmaps su null .

Menu dell'icona della barra delle applicazioni

Per aggiungere un menu all'icona della barra delle applicazioni, potete creare un oggetto NativeMenu e assegnarlo alla proprietà NativeApplication.nativeApplication.icon.menu (il sistema operativo non fornisce nessun menu predefinito). Per accedere all'icona della barra delle applicazioni, fate clic con il pulsante destro del mouse sull'icona.

Descrizione comandi dell'icona della barra delle applicazioni

Per aggiungere una descrizione comandi a un'icona, impostate la proprietà tooltip:

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

Eventi dell'icona della barra delle applicazioni

L'oggetto SystemTrayIcon a cui fa riferimento la proprietà NativeApplication.nativeApplication.icon invia un evento ScreenMouseEvent per gli eventi click , mouseDown , mouseUp , rightClick , rightMouseDown e rightMouseUp . Potete usare questi eventi, insieme al menu di un'icona, per consentire agli utenti di interagire con l'applicazione quando questa non dispone di finestre visibili.

Esempio: creazione di un'applicazione senza finestre

L'esempio seguente crea un'applicazione AIR che contiene un'icona della barra delle applicazioni, ma nessuna finestra visibile. (La proprietà visible dell'applicazione non deve essere impostata su true nel descrittore dell'applicazione; in caso contrario la finestra sarà visibile all'avvio dell'applicazione).

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]; 
        } 
    } 
} 
Nota: quando utilizzate il componente WindowedApplication di Flex, impostate l'attributo visible del tag WindowedApplication su false . Questo attributo sostituisce l'impostazione nel descrittore dell'applicazione.
Nota: l'esempio presuppone l'esistenza di file di immagine denominati AIRApp_16.png e AIRApp_128.png in una sottodirectory icons dell'applicazione (nell'SDK di AIR sono inclusi alcuni file icona di esempio che potete copiare nella cartella del progetto).

Icone e pulsanti della barra delle applicazioni

Rappresentazioni iconizzate delle finestre sono in genere visualizzate nell'area della finestra di una barra delle applicazioni o del dock per consentire agli utenti di accedere in modo semplice a finestre di sfondo o ridotte a icona. Il dock Mac OS X visualizza un'icona per l'applicazione, nonché un'icona per ciascuna finestra ridotta a icona. Nella barra delle applicazioni di Microsoft Windows e Linux è visualizzato un pulsante contenente il titolo e l'icona del programma per ogni finestra di tipo normale dell'applicazione.

Evidenziazione del pulsante della finestra della barra delle applicazioni

Quando una finestra è visualizzata sullo sfondo, potete inviare una notifica all'utente per indicare il verificarsi di un evento correlato alla finestra. In Mac OS X, potete inviare una notifica all'utente muovendo l'icona del dock dell'applicazione (come descritto in Movimento sul dock ). In Windows e Linux potete evidenziare il pulsante della barra delle applicazioni della finestra chiamando il metodo notifyUser() dell'istanza NativeWindow. Il parametro type passato al metodo determina l'urgenza della notifica:

  • NotificationType.CRITICAL : l'icona della finestra lampeggia fino a quando l'utente non visualizza la finestra in primo piano.

  • NotificationType.INFORMATIONAL : l'icona della finestra viene evidenziata modificando il colore.

    Nota: in Linux è supportato solo il tipo informativo di notifica. Otterrete lo stesso effetto passando uno qualsiasi dei valori di tipo alla funzione notifyUser() .

    L'istruzione seguente evidenzia il pulsante della barra delle applicazioni di una finestra:

    stage.nativeWindow.notifyUser(NotificationType.CRITICAL); 

    La chiamata del metodo NativeWindow.notifyUser() in un sistema operativo che non supporta la notifica a livello di finestra non ha effetto. Potete utilizzare la proprietà NativeWindow.supportsNotification per determinare se è supportata la notifica a livello di finestra.

Creazione di finestre senza pulsanti o icone della barra delle applicazioni

Nel sistema operativo Windows, le finestre create con i tipi utility o lightweight non compaiono nella barra delle applicazioni. Anche le finestre invisibili non compaiono nella barra delle applicazioni.

Poiché la finestra iniziale è necessariamente del tipo normal , per creare un'applicazione senza alcuna finestra visualizzata nella barra delle applicazioni, chiudete la finestra iniziale o lasciatela invisibile. Potete chiudere tutte le finestre nell'applicazione senza terminarla impostando la proprietà autoExit dell'oggetto NativeApplication su false prima di chiudere l'ultima finestra. Per impedire che la finestra iniziale diventi visibile, potete aggiungere <visible>false</visible> all'elemento <initalWindow> del file descrittore dell'applicazione (senza impostare la proprietà visible su true né chiamare il metodo activate() della finestra).

Nelle nuove finestre aperte dall'applicazione, potete impostare la proprietà type dell'oggetto NativeWindowInitOption passato alla funzione di costruzione della finestra su NativeWindowType.UTILITY o NativeWindowType.LIGHTWEIGHT .

In Mac OS X, le finestre ridotte a icona vengono visualizzate sulla barra delle applicazioni del dock. Per impedire la visualizzazione delle icone ridotte a icona, potete nascondere la finestra anziché ridurla a icona. L'esempio seguente intercetta un evento change nativeWindowDisplayState e lo annulla se la finestra viene ridotta a icona. Il gestore di eventi imposta invece la proprietà visible della finestra su false :

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

Se una finestra viene ridotta a icona sul dock Mac OS X quando impostate la proprietà visible su false , l'icona del dock non viene rimossa. Un utente può ancora fare clic sull'icona per far riapparire la finestra.