Подтвердить что ты не робот

Как создать меню опций в Android?

Я хочу создать простое меню опций в приложении Android с С# и Xamarin Studio. Как я могу это сделать?

Я не нашел ни одного примера С# этого. Может кто-нибудь просто объяснить, как создать меню опций, пожалуйста?

4b9b3361

Ответ 1

Определение меню

Один из способов создания меню - использовать XML файл, расположенный в папке Ресурсы/меню/папки вашего проекта Xamarin.Android.

Например:

Ресурсы/Меню/mymenu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:id="@+id/item1"
        android:title="Item 1"/>
  <item android:id="@+id/item2"
        android:title="Item 2"/>
  <item android:id="@+id/item3"
        android:title="Item 3"/>
</menu>

Чтобы узнать, какие другие параметры вы можете определить в XML файле меню, см. официальную документацию.

Использование меню

Вы можете раздуть меню xml в нескольких местах. Несколько примеров:

На панели инструментов

Android.Support.V7.Widget.Toolbar toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.mytoolbar);
toolbar.InflateMenu(Resource.Menu.mymenu);

Обработать клики

Чтобы обрабатывать события кликов в меню панели инструментов, вы должны реализовать интерфейс Toolbar.IOnMenuItemClickListener, переопределив следующий метод:

public bool OnMenuItemClick(IMenuItem item)
{
    switch (item.ItemId)
    {
        case Resource.Id.item1: 
                //Do stuff for item1
                return true;
        case Resource.Id.item2: 
                //Do stuff for item2
                return true;
        case Resource.Id.item3:
                //Do stuff for item3
                return true;
        default:
                return false;
     }
}

Затем вам нужно добавить класс, реализующий интерфейс, на панель инструментов в качестве слушателя:

toolbar.SetOnMenuItemClickListener(your_listener_class);

В расположении меню по умолчанию для Activity или Fragment (DEPRECATED)

В большинстве случаев расположение меню по умолчанию по умолчанию или фрагмент - это либо меню аппаратного меню, либо ActionBar. Добавление меню здесь может быть выполнено путем переопределения следующего метода:

В действии:

public override bool OnCreateOptionsMenu(IMenu menu)
{
    MenuInflater.Inflate(Resource.Menu.mymenu, menu);
    return true;
}

В фрагменте:

public override void OnCreateOptionsMenu(IMenu menu, MenuInflater inflater)
{
    inflater.Inflate(Resource.Menu.mymenu, menu);
}

Удостоверьтесь, что у вас есть HasOptionsMenu значение true в onCreate of Fragment, чтобы это работало.

Обработать клики

Затем вы можете обрабатывать клики в меню, переопределяя OnOptionsItemSelected

public override bool OnOptionsItemSelected(IMenuItem item)
{
    switch (item.ItemId)
    {
       case Resource.Id.item1: 
                //Do stuff for item1
                return true;
        case Resource.Id.item2: 
                //Do stuff for item2
                return true;
        case Resource.Id.item3:
                //Do stuff for item3
                return true;
        default:
                return false;
     }
}

После того, как мы обработали выбранный элемент, мы возвращаем true, чтобы уведомить об этом систему.

Альтернатива: программирование меню

Самое основное меню выполняется путем переопределения метода OnCreateOptionsMenu следующим образом:

public override bool OnCreateOptionsMenu(IMenu menu)
{
      menu.Add(0,0,0,"Item 0");
      menu.Add(0,1,1,"Item 1");
      menu.Add(0,2,2,"Item 2");
      return true;
}

Затем вы можете обрабатывать клики в меню параметров, переопределяя метод OnOptionsItemSelected.

public override bool OnOptionsItemSelected(IMenuItem item)
{
    switch (item.ItemId)
    {
        case 0: 
                //Do stuff for item 0
                return true;
        case 1: 
                 //Do stuff for item 1
                return true;
        case 2: 
                //Do stuff for item 2
                return true;
        default:
                return false;
     }
}