2010-10-02 6 views
0

Quelle serait la meilleure façon de créer une application Adobe AIR sans fenêtre (c'est-à-dire uniquement dans la barre d'état système/la station d'accueil)? J'ai remarqué que la balise de base par défaut dans Flash Builder est <s:WindowedApplication> ce qui semble impliquer qu'il y aura une fenêtre.Sans fenêtre (non chromeless) Application Adobe AIR

Dois-je simplement utiliser <s:WindowedApplication> et appeler window.hide()? J'ai vu qu'il y avait une autre classe de base, <s:Application>, mais j'avais l'impression que c'était plus pour les fichiers qui tournent dans le navigateur. Il semble que l'utilisation de window.hide() clignoterait brièvement une fenêtre au démarrage de l'application, ce qui pourrait perturber les utilisateurs. Cependant, j'aimerais aussi idéalement conserver la possibilité d'avoir l'application ouverte une fenêtre plus tard si nécessaire, ou aussi de changer l'application de la barre d'état à la fenêtre en passant par une mise à jour.

Répondre

1

Vous devez modifier le fichier app-config pour activer le chrome transparent et visible = false. Ensuite, vous devez modifier la balise WindowedApplication et appliquer votre habillage personnalisé. Vous devez ajouter des boutons de contrôle pour fermer, etc., car cette fonctionnalité n'est pas présente dans une application Web (puisque vous avez modifié la balise). Aussi, vous devez ajouter une fonctionnalité de glisser. Si vous souhaitez redimensionner votre application, vous devez également l'ajouter manuellement.

+0

Merci pour la réponse, mais je ne cherche pas à avoir la fenêtre sur mesure chrome - Je cherche à se débarrasser de la fenêtre entièrement (et juste montrer un icône de plateau à la place, mais j'ai compris la partie icône de plateau). Le plus proche est la définition de 'window.visible = false' à l'initialisation, mais cela provoque une brève ouverture de la fenêtre et j'aimerais éviter cela d'une façon ou d'une autre si possible. – Alan

+1

Dans votre fichier airAppName-app.xml, définissez "systemChrome" sur "none", "transparent" sur "true" et "visible" sur "false". – boring

+1

En fait, je viens de trouver l'option "visible" dans le fichier -app.xml et j'ai été excité, mais pour une raison quelconque, AIR semblait l'ignorer - il affichait toujours la fenêtre malgré tout ce que vous avez mentionné. J'utilise AIR 2.0, peut-être est-il obsolète ou quelque chose? Quoi qu'il en soit, je viens de découvrir que l'ajout de 'visible =" false "' à mon '' a fonctionné, donc il est finalement résolu. Merci! – Alan

0

Dans votre fichier manifeste (-app.xml), définissez systemChrome sur none et transparent to true. La propriété visible est non pertinente, et la valeur par défaut est false, alors ignorez-la. Vous devrez modifier cela, importer toutes les classes manquantes, etc ... vous pouvez aussi le faire en tant que composant mxml et simplement définir visible et activé à false sur la balise racine. Remplissez le tableau trayImages avec les icônes que vous voulez dans le dock.

p

ackage{ 

import spark.components.WindowedApplication; 

public class HiddenApplication extends WindowedApplication{ 


public function HiddenApplication(){ 
    super(); 
    enabled=false; 
    visible=false; 
var trayImages:Array; 
    if(NativeApplication.supportsDockIcon||NativeApplication.supportsSystemTrayIcon){ 
       NativeApplication.nativeApplication.activate(); 
       var sep:NativeMenuItem = new NativeMenuItem(null,true); 
       var exitMenu:NativeMenuItem = new NativeMenuItem('Exit',false); 
       exitMenu.addEventListener(Event.SELECT,shutdown); 
       var updateMenu:NativeMenuItem = new NativeMenuItem('Check for Updates',false); 
       updateMenu.addEventListener(Event.SELECT,upDcheck); 
       var prefsMenu:NativeMenuItem = new NativeMenuItem('Preferences',false); 
       prefsMenu.addEventListener(Event.SELECT,Controller.showSettings); 
       NativeApplication.nativeApplication.icon.addEventListener(ScreenMouseEvent.CLICK,showToolBar); 
        if(NativeApplication.supportsSystemTrayIcon){ 
         trayIcon = SystemTrayIcon(NativeApplication.nativeApplication.icon); 
         setTrayIcons(); 
         trayIcon.tooltip = "Some random tooltip text"; 
         trayIcon.menu = new NativeMenu(); 
         trayIcon.menu.addItem(prefsMenu); 
         trayIcon.menu.addItem(sep); 
         trayIcon.menu.addItem(updateMenu); 
         trayIcon.menu.addItem(exitMenu); 
        } 
        else{ 
         dockIcon = DockIcon(NativeApplication.nativeApplication.icon); 
         setTrayIcons(); 
         dockIcon.menu = new NativeMenu(); 
         dockIcon.menu.addItem(prefsMenu); 
         dockIcon.menu.addItem(sep); 
         dockIcon.menu.addItem(updateMenu); 
         dockIcon.menu.addItem(exitMenu); 
        } 
      } 
      function setTrayIcons(n:Number=0):void{ 
       if(showTrayIcon&&(trayIcon||dockIcon)){ 
        Controller.debug('Updating tray icon'); 
        if(NativeApplication.supportsSystemTrayIcon){ 
         trayIcon.bitmaps = trayImages; 
        } 
        else if(NativeApplication.supportsDockIcon){ 
         dockIcon.bitmaps = trayImages; 
        } 
       } 
       else if(trayIcon||dockIcon) trayIcon.bitmaps = new Array(); 

     } 
} 

}