Создание меню приложения

By | 24.01.2014

У большинства приложений на Android есть меню с различными настройками и второстепенными страницами. Попробуем добавить такое меню и в наше приложение.

При создании класса Activity автоматически добавляется метод onCreateOptionsMenu().

Первый и самый простой способ добавления пунктов меню, прописать в этом методе следующий метод menu.add(«Пункт меню»);, где в кавычках мы указываем нужные пункты меню. Этот способ нам не особо интересен, т.к. проверку какой из пунктов выбран придётся делать по тексту, а это не лучший вариант.

Есть ещё одна реализация этого метода (благо есть перегрузка методов в Java), когда на вход ему подаётся не один строчный параметр, а уже 4 аргумента add(int groupId, int itemId, int order, CharSequence title). Рассмотрим что это значит:

  • groupId — это ID группы, к которой отнести данный пункт меню
  • itemId — ID пункта меню
  • order — последовательность пунктов меню
  • title — текст пункта меню

Чтобы теперь обработать выбранный пункт меню, мы будет получать его ID и сравнивать, удобнее всего это сделать через switch. Для этого используется метод public boolean onOptionsItemSelected(MenuItem item) который на входе получает выбранный пункт меню. Покажу как можно обработать выбранный пункт меню на примере.

switch(item.getItemId()) {
  case 1:
    // какой-то код, связанный с выбраннм пунктом меню
    break;
}

Есть ещё один интересный метод public boolean onPrepareOptionsMenu(Menu menu). Он используется для изменения уже созданного меню. Допустим если нужно отображать разные пункты меню в зависимости от действий пользователя. Делается это так:

menu.setGroupVisible(1, __условие__;     // __условие__ - это любое boolean-значение
return super.onPrepareOptionsMenu(menu);

Ну и последний вариант отображения меню, это вывод его в XML файле меню. Создаем в папке res/menu файл с именем some_menu.xml. Я просто покажу код XML-файла с меню, там все довольно просто и понятно:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <item
    android:id="@+id/menu_field1"
    android:title="Menu 1">
  </item>
  <item
    android:id="@+id/menu_field2"
    android:title="Menu 2">
  </item>
 
  <group android:id="@+id/groupMenu1">
    <item
      android:id="@+id/menu_field31"
      android:orderInCategory="1"
      android:title="Menu 3.1">
    </item>
    <item
      android:id="@+id/menu_field32"
      android:orderInCategory="2"
      android:title="Menu 3.2">
    </item>
  </group>
</menu>