Creación de menús nativos (AIR)

Adobe AIR 1.0 y posterior

Este tema describe la manera de crear los diferentes tipos de menús nativos admitidos en AIR.

Creación de un objeto de menú raíz

Para crear un objeto NativeMenu para que actúe como la raíz del menú, se debe utilizar el constructor NativeMenu:

var root:NativeMenu = new NativeMenu(); 

Para los menús de aplicación y de ventana, el menú raíz representa la barra de menús y solo debe tener los elementos que abren submenús. Los menús contextual y emergentes no tienen una barra de menús, por lo que el menú raíz puede tener líneas separadoras y comandos así como submenús.

Después de crear el menú, se pueden añadir elementos de menú. Los elementos aparecen en el menú en el orden en que se añaden, a menos que se añadan los elementos en un índice específico utilizando el método addItemAt() de un objeto de menú.

Se puede asignar el menú como un menú de aplicación, de ventana, de icono o contextual o mostrarlo como un menú emergente como se muestra en las siguientes secciones:

Definición del menú de aplicación o el menú de ventana

Es importante que el código se acomode a los menús de la aplicación (admitidos en Mac OS) y a los menús de ventana (admitidos en otros sistemas operativos)

var root:NativeMenu = new NativeMenu(); 
if (NativeApplication.supportsMenu) 
{ 
    NativeApplication.nativeApplication.menu = root; 
} 
else if (NativeWindow.supportsMenu) 
{ 
    nativeWindow.menu = root; 
}
Nota: Mac OS define un menú que contiene elementos estándares para cada aplicación. Si se asigna un nuevo objeto NativeMenu a la propiedad menu del objeto NativeApplication se remplaza el menú estándar. También se puede utilizar el menú estándar en lugar de sustituirlo.

Adobe Flex proporciona una clase FlexNativeMenu para crear fácilmente menús que funcionen en distintas plataformas. Si está utilizando Flex Framework, use las clases FlexNativeMenu en lugar de la clase NativeMenu.

Definición de un menú contextual en un objeto interactivo

interactiveObject.contextMenu = root;

Definición de un menú de icono de acoplamiento o un menú de icono de la bandeja del sistema

Es importante que el código se acomode a los menús de la aplicación (admitidos en Mac OS) y a los menús de ventana (admitidos en otros sistemas operativos)

if (NativeApplication.supportsSystemTrayIcon) 
{ 
    SystemTrayIcon(NativeApplication.nativeApplication.icon).menu = root; 
} 
else if (NativeApplication.supportsDockIcon) 
{ 
    DockIcon(NativeApplication.nativeApplication.icon).menu = root; 
}
Nota: Mac OS X define un menú estándar para el icono de acoplamiento de la aplicación. Cuando se asigna un nuevo NativeMenu a la propiedad de menú del objeto DockIcon, los elementos en ese menú se muestran arriba de los elementos estándar. No se pueden quitar, acceder ni modificar los elementos de menú estándar.

Visualización de un menú como un menú emergente

root.display(stage, x, y); 

Creación de un submenú

Para crear un submenú, se añade un objeto NativeMenuItem al menú principal y luego se asigna el objeto NativeMenu definiendo el submenú a la propiedad submenu del elemento. AIR proporciona dos modos de crear elementos de submenú y los objetos de menú asociados:

Se puede crear un elemento de menú y el objeto de menú relacionado en un paso con el método addSubmenu() :

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

También se puede crear el elemento de menú y asignar el objeto de menú a la propiedad submenu de forma separada:

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

Creación de un comando de menú

Para crear un comando de menú, añada un objeto NativeMenuItem a un menú y añada un detector de evento que hace referencia a la función que implementa el comando de menú:

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

Se puede detectar un evento select en el elemento de comando mismo (como se muestra en el ejemplo) o se puede detectar el evento select en un objeto de menú principal.

Nota: los elementos de menú que representan submenús y líneas separadoras no distribuyen eventos select y por ende no se pueden utilizar como comandos.

Creación de una línea separadora de menú

Para crear una línea separadora, se debe crear un NativeMenuItem, definir el parámetro isSeparator en true en el constructor. Luego añadir el elemento separador al menú en la ubicación correcta:

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

La etiqueta especificada para el separador, si hay una, no se muestra.