» Программирование Android

Написание приложений для Android. Часть 2: Создание меню

Мы продолжаем цикл статей о создании собственных приложений для ОС Android. На этот раз мы затронем тему создания в приложении меню и наполнения его дополнительными функциями.

В предыдущей статье мы уже разобрались с основами создания пользовательского интерфейса. На этот раз мы попытаемся добавить в наше приложение основное меню, которое можно открыть нажатием кнопки «Меню» на девайсе, а также дополнительное контекстное меню, которое можно вызвать длительным нажатием на рабочую область. Напомним, что за основу мы взяли Google Maps.

Сначала давайте ознакомимся, какие виды меню доступны для приложений в операционной системе Android. А доступно их три вида:

Options Menu – это основное меню программы, которое вызывается нажатием соответствующей кнопки на мобильном девайсе. Естественно, данное меню присутствует практически в любом приложении. Options Menu может состоять из пиктограмм двух категорий:

Icon Menu, или главное меню, которое способно отобразить до шести иконок. Если иконок больше шести, то последняя преобразовывается в пресловутое «Еще…». Данная кнопка же, в свою очередь, ведет в Expanded Menu.

Expanded Menu – вертикальное меню, которое содержит шестую, а также все остальные иконки, которые не поместились в главном меню (Icon Menu).

Context Menu – это всплывающее меню, вызываемое длительным нажатием на рабочую область или какой-либо элемент интерфейса, по сути же – аналог клика правой кнопкой мышки на персональном компьютере.

Submenu – всплывающее меню, которое при необходимости вызывается нажатием на Options Menu или Context Menu. Submenu не может иметь собственных подменю.

Для достижения поставленных целей нам понадобятся такие виды меню, как Options Menu и Context Menu. Открываем наш проект. Нам потребуется иконка для создаваемого меню, так что создаем её или берем из любого источника. Меню опций у нас будет всего с одним пунктом, а именно – «Выход».

Во-первых, меню следует описать в отдельном файле xml. Описания всех меню приложения находятся в директории res/menu, так что если такой папки нет – создаем её. Внутри директории создаем файл icon_menu.xml:

Заполняем данный файл. Корневым тегом является xml-тег menu, а сами элементы меню описываются дочерними тегами item. Item имеет три параметра:

Id – идентификатор элемента меню.

Icon – очевидно, это иконка элемента меню.

Title – название элемента меню.

Созданный xml-файл будет иметь следующий вид:

<?xml version=»1.0″ encoding=»utf-8″?>

<menu xmlns:android=»http://schemas.android.com/apk/res/android»>

    <item android:id=»@+id/quit»

          android:icon=»@drawable/ic_menu_exit»

android:title=»@string/quit» />

</menu>

 

В файл res/values/strings.xml добавляем строчку «quit»:

<string name=»quit»>Выйти</string>

 

Не забываем добавить иконки, созданные или взятые из стороннего источника. Импортируем их во все три папки drawable. Для вызова диалогового окна импорта, кликаем правой кнопкой на папке и выбираем пункт «Import».

Меню создано и необходимые ресурсы с ним связаны. Осталось задействовать его непосредственно в приложении. Это не слишком сложно. В java-проекте добавляем вот такие строки:

@Override

    public boolean onCreateOptionsMenu(Menu menu) {

        MenuInflater inflater = getMenuInflater();

        inflater.inflate(R.menu.icon_menu, menu);

        return true;

    }

В Eclipse всё несколько проще – нажав сочетание клавиш Ctrl + Shift + O нужные классы будут автоматически добавлены в создаваемый проект.

Метод onCreateOptionsMenu вызывается путем нажатия кнопки «Меню» пользователем. Переопределяем его и добавляем созданный в .xml-файле контент.

Если всё было сделано как следует, при запуске приложения на экране будет отображена вот такая вот картина:

Осталось добавить созданной кнопке «Выход» соответствующий функционал – то есть завершение приложения по нажатию. В CityBus.java добавляем такие строки:

@Override

    public boolean onOptionsItemSelected(MenuItem item) {

        // Handle item selection

        switch (item.getItemId()) {

        case R.id.quit:

            quit();

            return true;

        default:

            return super.onOptionsItemSelected(item);

        }

    }

 

В данном отрывке кода мы проводим переопределение onOptionsItemSelected и перехватываем нажатие на элементы меню, после чего проводится проверка, какой именно элемент меню был нажат. Так как вызывается метод quit() класса CityBus, добавляем его в код следующими строками:

private void quit() {

            finish();

}

Здесь ничего сложного уже нет — finish() завершает выполнение приложения, то есть выходит из него. Именно то, что нам нужно. Проверяем код в работе – если всё сделано правильно, то ошибок возникнуть не должно.

На этом всё. Мы создали простенькое приложение на основе Google Maps с возможностью масштабирования карты и выхода.