构建没有任何窗口的Adobe AIR应用程序(即仅存在于系统托盘/扩展坞中)的最佳方法是什么?我注意到Flash Builder中的默认基本标记是<s:WindowedApplication>
,这似乎意味着会有一个窗口。
我应该使用<s:WindowedApplication>
并致电window.hide()
吗?我看到还有另一个基类<s:Application>
,但我对这个在浏览器中运行的文件更有意义。似乎使用window.hide()
会在应用程序启动时短暂闪烁一个窗口,这可能会使用户感到困惑。但是,我还希望能够让应用程序在以后需要时打开一个窗口,或者将应用程序从仅托盘更改为窗口更新。
答案 0 :(得分:1)
您需要编辑app-config文件以启用透明chrome和visible = false。然后,您需要将WindowedApplication标记更改为并自定义您的自定义外观。您需要添加用于关闭等的控制按钮,因为该功能在Web应用程序中不存在(因为您已更改了标记)。您还需要添加拖动功能。如果你想让你的应用程序重新调整大小,你也需要手动添加它。
答案 1 :(得分:0)
在manifest(-app.xml)文件中,将systemChrome设置为none,将透明设置为true。可见属性是无关紧要的,默认为false,所以忽略它。
你将不得不调整它,导入任何缺少的类等等...你也可以将其作为mxml组件,并在root标签上设置visible并启用为false。使用所需的图标填充trayImages数组。
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();
}
}
}