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

Adobe AIR 1.0 およびそれ以降

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

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

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

var root = new air.NativeMenu();

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

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

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

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

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

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

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

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

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

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

 
root.display(window.nativeWindow.stage, x, y);

サブメニューの作成

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

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

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

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

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

メニューコマンドの作成

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

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

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

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

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

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

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

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