2010-10-02 38 views
0

構建一個沒有任何窗口(即僅存在於系統托盤/底座中)的Adobe AIR應用程序的最佳方法是什麼?我注意到Flash Builder中的默認基本標籤是<s:WindowedApplication>,這似乎暗示會有一個窗口。無窗口(非chromeless)Adobe AIR應用程序

我應該只使用<s:WindowedApplication>並致電window.hide()?我看到還有另一個基類,<s:Application>,但我的感覺更多的是在瀏覽器中運行的文件。似乎使用window.hide()會在應用程序啓動時短暫閃爍窗口,這可能會讓用戶感到困惑。不過,如果需要,我還希望保留讓應用程序稍後打開窗口的能力,或者也可以通過更新將應用程序從托盤更改爲窗口。

回答

1

您需要編輯app-config文件以啓用透明鑲邊和visible = false。然後,您需要將WindowedApplication標籤更改爲並應用您的自定義外觀。您需要添加用於關閉等的控制按鈕,因爲該功能不存在於Web應用程序中(因爲您已更改標籤)。您還需要添加拖動功能。如果你想讓你的應用程序重新大小化,你還需要手動添加。

+0

感謝您的答覆,但我不希望有自定義窗口鉻 - 我在尋找擺脫完全窗口(並只顯示一個托盤圖標,但我想出了托盤圖標部分)。我最近的設置是在初始化時設置'window.visible = false',但是這會導致窗口短暫閃爍,我想盡可能避免這種情況。 – Alan 2010-10-05 04:03:42

+1

在您的airAppName-app.xml文件中,將「systemChrome」設置爲「none」,將「transparent」設置爲「true」,將「visible」設置爲「false」。 – boring 2010-10-05 04:27:04

+1

我實際上剛剛在-app.xml文件中發現了「visible」選項並且很興奮,但由於某種原因,AIR似乎忽略了它 - 儘管設置了您提到的所有內容,但它仍然顯示了窗口。我正在使用AIR 2.0,也許它已被棄用或者什麼?無論如何,我剛剛發現在我的中添加'visible =「false」'工作,所以終於解決了。謝謝! – Alan 2010-10-05 05:05:29

0

在您的清單(-app.xml)文件中將systemChrome設置爲none且透明爲true。可見屬性無關緊要,並且默認值爲false,因此無視它。

你必須調整它,導入缺失的類,等等......你也可以將它作爲一個mxml組件,並在根標記上設置可見和啓用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(); 

     } 
} 

}

相關問題