Я хочу создать простое меню опций в приложении Android с С# и Xamarin Studio. Как я могу это сделать?
Я не нашел ни одного примера С# этого. Может кто-нибудь просто объяснить, как создать меню опций, пожалуйста?
Я хочу создать простое меню опций в приложении Android с С# и Xamarin Studio. Как я могу это сделать?
Я не нашел ни одного примера С# этого. Может кто-нибудь просто объяснить, как создать меню опций, пожалуйста?
Один из способов создания меню - использовать 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);
В большинстве случаев расположение меню по умолчанию по умолчанию или фрагмент - это либо меню аппаратного меню, либо 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;
}
}