Menú emergentePopUp Menu

El menú emergente (también denominado una menú contextual) es un menú que se encuentra delimitado respecto a una vista determinada.The PopupMenu (also called a shortcut menu) is a menu that is anchored to a particular view. En el ejemplo siguiente, una sola actividad contiene un botón.In the following example, a single Activity contains a button. Cuando el usuario pulsa el botón, se muestra un menú emergente de tres elementos:When the user taps the button, a three-item popup menu is displayed:

Ejemplo de una aplicación con un botón y un menú emergente de tres elementosExample of an app with a button and three-item pop-up menu

Creación de un menú emergenteCreating a Popup Menu

El primer paso es crear un archivo de recursos de menú para el menú y colóquelo en recursos o menú.The first step is to create a menu resource file for the menu and place it in Resources/menu. Por ejemplo, el siguiente código XML es el código para el menú de tres elementos que se muestra en la captura de pantalla anterior, Resources/menu/popup_menu.xml:For example, the following XML is the code for the three-item menu displayed in the previous screenshot, Resources/menu/popup_menu.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/item1"
          android:title="item 1" />
    <item android:id="@+id/item1"
          android:title="item 2" />
    <item android:id="@+id/item1"
          android:title="item 3" />
</menu>

A continuación, cree una instancia de PopupMenu y anclarlo a su vista.Next, create an instance of PopupMenu and anchor it to its view. Cuando se crea una instancia de PopupMenu, pasar su constructor una referencia a la Context , así como la vista a la que se adjuntará el menú.When you create an instance of PopupMenu, you pass its constructor a reference to the Context as well as the view to which the menu will be attached. Como resultado, el menú emergente está anclado a esta vista durante su construcción.As a result, the popup menu is anchored to this view during its construction.

En el ejemplo siguiente, la PopupMenu se crea en el controlador de eventos click del botón (que se denomina showPopupMenu).In the following example, the PopupMenu is created in the click event handler for the button (which is named showPopupMenu). Este botón también es la vista a la que el PopupMenu está anclada, tal como se muestra en el ejemplo de código siguiente:This button is also the view to which the PopupMenu is anchored, as shown in the following code example:

showPopupMenu.Click += (s, arg) => {
    PopupMenu menu = new PopupMenu (this, showPopupMenu);
};

Por último, debe ser el menú emergente aumentada con el recurso de menú que se creó anteriormente.Finally, the popup menu must be inflated with the menu resource that was created earlier. En el ejemplo siguiente, la llamada en el menú Inflate se agrega el método y su mostrar método se llama para mostrar:In the following example, the call to the menu's Inflate method is added and its Show method is called to display it:

showPopupMenu.Click += (s, arg) => {
    PopupMenu menu = new PopupMenu (this, showPopupMenu);
    menu.Inflate (Resource.Menu.popup_menu);
    menu.Show ();
};

Control de eventos de menúHandling Menu Events

Cuando el usuario selecciona un elemento de menú, el MenuItemClick haga clic en, se generará el evento y se descartará el menú.When the user selects a menu item, the MenuItemClick click event will be raised and the menu will be dismissed. Puntear en cualquier lugar fuera del menú se simplemente descarte.Tapping anywhere outside the menu will simply dismiss it. En cualquier caso, cuando se descarta el menú, su DismissEvent , se generará.In either case, when the menu is dismissed, its DismissEvent will be raised. El código siguiente agrega controladores de eventos tanto para el MenuItemClick y DismissEvent eventos:The following code adds event handlers for both the MenuItemClick and DismissEvent events:

showPopupMenu.Click += (s, arg) => {
    PopupMenu menu = new PopupMenu (this, showPopupMenu);
    menu.Inflate (Resource.Menu.popup_menu);

    menu.MenuItemClick += (s1, arg1) => {
        Console.WriteLine ("{0} selected", arg1.Item.TitleFormatted);
    };

    menu.DismissEvent += (s2, arg2) => {
        Console.WriteLine ("menu dismissed");
    };
    menu.Show ();
};