ネイティブメニューの作成(AIR)

Adobe AIR 1.0 およびそれ以降

このトピックでは、AIR でサポートされる様々なタイプのネイティブメニューを作成する方法を示します。

ルートメニューオブジェクトの作成

メニューのルートとして機能する NativeMenu オブジェクトを作成するには、NativeMenu コンストラクターを使用します。

var root:NativeMenu = new NativeMenu(); 

アプリケーションメニューおよびウィンドウメニューでは、ルートメニューはメニューバーを表し、サブメニューを開くアイテムのみが格納されます。コンテキストメニューおよびポップアップメニューにはメニューバーがないため、ルートメニューにコマンドやセパレーター線、およびサブメニューを含めることはできません。

メニューを作成したら、メニューアイテムを追加できます。アイテムは、追加した順序で表示されます。アイテムを特定のインデックスに表示するには、メニューオブジェクトの addItemAt() メソッドを使用します。

以降の節で示すように、メニューはアプリケーション、ウィンドウ、アイコンまたはコンテキストのいずれかのメニューとして割り当てるか、ポップアップメニューとして表示します。

アプリケーションメニューの設定またはウィンドウメニューの設定

コードには、アプリケーションメニュー(Mac OS でサポート)とウィンドウメニュー(その他のオペレーティングシステムでサポート)の両方を含めることが重要です。

var root:NativeMenu = new NativeMenu(); 
if (NativeApplication.supportsMenu) 
{ 
    NativeApplication.nativeApplication.menu = root; 
} 
else if (NativeWindow.supportsMenu) 
{ 
    nativeWindow.menu = root; 
}
注意: Mac OS では、すべてのアプリケーション用の標準アイテムを含むメニューを定義します。新しい NativeMenu オブジェクトを NativeApplication オブジェクトの menu プロパティに割り当てると、標準のメニューが置き換えられます。置き換えずに標準のメニューを使用することもできます。

Adobe Flex の FlexNativeMenu クラスを使用すると、様々なプラットフォームで機能するメニューを簡単に作成できます。Flex フレームワークを使用している場合は、NativeMenu クラスではなく FlexNativeMenu クラスを使用します。

インタラクティブオブジェクトのコンテキストメニューの設定

interactiveObject.contextMenu = root;

ドックアイコンメニューの設定またはシステムトレイアイコンメニューの設定

コードには、アプリケーションメニュー(Mac OS でサポート)とウィンドウメニュー(その他のオペレーティングシステムでサポート)の両方を含めることが重要です。

if (NativeApplication.supportsSystemTrayIcon) 
{ 
    SystemTrayIcon(NativeApplication.nativeApplication.icon).menu = root; 
} 
else if (NativeApplication.supportsDockIcon) 
{ 
    DockIcon(NativeApplication.nativeApplication.icon).menu = root; 
}
注意: Mac OS X では、アプリケーションのドックアイコン用に標準のメニューが定義されています。新しい NativeMenu を DockIcon オブジェクトの menu プロパティに割り当てると、そのメニューに含まれるアイテムが標準のアイテムの上に表示されます。標準のメニューアイテムの削除、アクセスまたは変更を行うことはできません。

ポップアップとしてのメニューの表示

root.display(stage, x, y); 

サブメニューの作成

サブメニューを作成するには、NativeMenuItem オブジェクトを親メニューに追加し、そのアイテムの submenu プロパティにサブメニューを定義する NativeMenu オブジェクトを割り当てます。AIR には、サブメニューアイテムとそれに関連するメニューオブジェクトを作成する方法が 2 つあります。

addSubmenu() メソッドを使用すると、メニューアイテムおよび関連するメニューオブジェクトを 1 つの手順で作成できます。

var editMenuItem:NativeMenuItem = root.addSubmenu(new NativeMenu(), "Edit"); 

メニューアイテムの作成とその submenu プロパティへのメニューオブジェクトの割り当てを、別々に行うこともできます。

var editMenuItem:NativeMenuItem = root.addItem("Edit", false); 
editMenuItem.submenu = new NativeMenu(); 

メニューコマンドの作成

メニューコマンドを作成するには、NativeMenuItem オブジェクトをメニューに追加し、メニューコマンドを実装する関数を参照するイベントリスナーを追加します。

var copy:NativeMenuItem = new NativeMenuItem("Copy", false); 
copy.addEventListener(Event.SELECT, onCopyCommand); 
editMenu.addItem(copy);

select イベントは、この例のようにコマンドアイテム自体でリッスンすることも、親メニューオブジェクトでリッスンすることもできます。

注意: サブメニューおよびセパレーター線を表すメニューアイテムからは select イベントは送出されないため、それらのアイテムをコマンドとして使用することはできません。

メニューセパレーター線の作成

セパレーター線を作成するには、NativeMenuItem を作成し、そのコンストラクターで isSeparator パラメーターを true に設定します。次に、セパレーターアイテムをメニュー内の適切な位置に追加します。

var separatorA:NativeMenuItem = new NativeMenuItem("A", true); 
editMenu.addItem(separatorA);

セパレーターにラベルを指定しても、そのラベルは表示されません。