Создание Options Menu в Android

| 04.04.2014

Меню опций — один из важных компонентов любого приложения. Как правило, те опции, которые здесь помещаются, касаются приложения в целом, а не каких-то отдельных его компонентов. Начиная с Андроида версии 3, меню опций стало неотъемлемой частью Action Bar-а. До этой версии вызвать эту менюшку можно с помощью кнопки Menu. Как советуют разработчики системы, сейчас лучше всего полагаться именно на Action Bar, т.к. некоторые новые устройства сегодня уже даже не имеют кнопки Menu. В данном уроке мы создадим простейшее меню из двух пунктов: «О приложении» и «Настройки». Создадим также метод, который будет срабатывать при выборе какого-то пункта.

Создадим новый Android-проект — OptionsMenu. В нашем случае не имеет значения, что вы добавите в файл компоновки activity_main.xml, т.к. мы будем работать только с Options-меню. Оставим layout пустым.

1
2
3
4
5
6
7
8
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"     
    tools:context=".MainActivity">
 
</RelativeLayout>

Добавим в основной класс приложения MainActivity.java помимо стандартного метода onCreate() еще два: onCreateOptionsMenu(Menu menu) и onOptionsItemSelected(MenuItem item).

MainActivity.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package ru.androiddocs.optionsmenu;
 
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
 
public class MainActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
            case R.id.action_settings:
                //здесь вызов активити с настройками
 
                return true;
            case R.id.about_app:
                //здесь вызов активити или попапа с информацией о приложении
 
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

Первый метод вызывается перед созданием меню, и здесь мы задаем все пункты меню с помощью строки:

1
getMenuInflater().inflate(R.menu.main, menu);

То есть вызываем «заполнитель меню» и передаем ему для наполнения пункты из ресурса res/menu/main.xml:

1
2
3
4
5
6
7
8
9
10
11
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_settings"/>
 
    <item android:id="@+id/about_app"
        android:showAsAction="never"
        android:title="@string/about"/>          
</menu>

Как видите, в меню всего два пункта. Заголовки для пунктов берутся из файла со строковыми ресурсами res/values/strings.xml:

1
2
3
4
5
6
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">OptionsMenu</string>
    <string name="action_settings">Настройки</string>
    <string name="about">О приложении</string>
</resources>

Метод onOptionsItemSelected(MenuItem item) из MainActivity.java срабатывает, когда мы выбираем какой-то пункт. В качестве параметра передается объект пункта и в конструкции switch мы перебираем все возможные варианты значения id данного пункта. Если совпадение есть, то отрабатывается именно этот блок case. Сейчас внутри этих блоков ничего нет, но мы могли бы поместить сюда вызов какого-то метода или код, совершающий определенные действия. Чаще всего, выбор того или иного пункта сопровождается вызовом нового активити или диалогового окна.

Если мы сейчас скомпилируем приложение, запустим его и вызовем меню опций, то получим такую картинку:

Создание Options Menu в Android

Попробуйте самостоятельно добавить вызов какого-то нового активити или диалогового окна при выборе определенного пункта (воспользуйтесь материалами других уроков).

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*