Xamarin.Android PopUp Menu
O PopupMenu (também chamado de menu de atalho) é um menu ancorado a uma exibição específica. No exemplo a seguir, uma única Atividade contém um botão. Quando o usuário toca no botão, um menu pop-up de três itens é exibido:
Criando um menu pop-up
A primeira etapa é criar um arquivo de recurso de menu para o menu e colocá-lo em Recursos/menu. Por exemplo, o seguinte XML é o código para o menu de três itens exibido na captura de tela anterior, Recursos/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>
Em seguida, crie uma instância de PopupMenu
e ancorá-la à sua exibição. Ao criar uma instância do PopupMenu
, você passa ao construtor uma referência ao Context
modo de exibição ao qual o menu será anexado. Como resultado, o menu pop-up é ancorado a essa exibição durante sua construção.
No exemplo a seguir, o PopupMenu
é criado no manipulador de eventos click para o botão (que é chamado showPopupMenu
). Esse botão também é o modo de exibição ao qual o PopupMenu
está ancorado, conforme mostrado no exemplo de código a seguir:
showPopupMenu.Click += (s, arg) => {
PopupMenu menu = new PopupMenu (this, showPopupMenu);
};
Finalmente, o menu pop-up deve ser inflado com o recurso de menu que foi criado anteriormente. No exemplo a seguir, a chamada para o método Inflate do menu é adicionada e seu método Show é chamado para exibi-lo:
showPopupMenu.Click += (s, arg) => {
PopupMenu menu = new PopupMenu (this, showPopupMenu);
menu.Inflate (Resource.Menu.popup_menu);
menu.Show ();
};
Manipulando eventos de menu
Quando o usuário seleciona um item de menu, o evento de clique MenuItemClick será gerado e o menu será descartado. Tocar em qualquer lugar fora do menu simplesmente o descartará. Em ambos os casos, quando o cardápio for dispensado, sua demissão será levantada. O código a seguir adiciona manipuladores de eventos para os MenuItemClick
eventos e DismissEvent
:
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 ();
};