다음을 통해 공유


Xamarin.Android 팝업 메뉴

PopupMenu(바로 가기 메뉴라고도 함)는 특정 보기에 고정되는 메뉴입니다. 다음 예제에서 단일 활동에는 단추가 포함됩니다. 사용자가 단추를 탭하면 3개 항목 팝업 메뉴가 표시됩니다.

단추와 3개 항목 팝업 메뉴가 있는 앱의 예

팝업 메뉴 만들기

첫 번째 단계는 메뉴에 대한 메뉴 리소스 파일을 만들고 리소스/메뉴배치하는 것입니다. 예를 들어 다음 XML은 이전 스크린샷에 표시된 3개 항목 메뉴의 코드인 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>

다음으로 인스턴스를 PopupMenu 만들고 해당 뷰에 고정합니다. 인스턴스 PopupMenu를 만들 때 해당 생성자에 대한 참조 Context 와 메뉴가 연결될 뷰를 전달합니다. 따라서 팝업 메뉴는 생성 중에 이 보기에 고정됩니다.

다음 예제 PopupMenu 에서는 단추에 대한 클릭 이벤트 처리기(이름 지정 showPopupMenu)에 만들어집니다. 이 단추는 다음 코드 예제와 같이 고정되는 보기 PopupMenu 이기도 합니다.

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

마지막으로, 이전에 만든 메뉴 리소스를 사용하여 팝업 메뉴를 확장해야 합니다. 다음 예제에서는 메뉴의 Inflate 메서드에 대한 호출이 추가되고 Show 메서드를 호출하여 표시합니다.

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

메뉴 이벤트 처리

사용자가 메뉴 항목을 선택하면 MenuItemClick 클릭 이벤트가 발생하고 메뉴가 해제됩니다. 메뉴 외부의 아무 곳이나 탭하면 해제됩니다. 두 경우 모두 메뉴가 해제되면 해당 DismissEvent 가 발생합니다. 다음 코드는 이벤트와 DismissEvent 이벤트 모두 MenuItemClick 에 대한 이벤트 처리기를 추가합니다.

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 ();
};