Лабораторные работы / ЛБ Android Studio / 08_Создание_меню
.docСоздание меню
Android поддерживает несколько типов меню. Первый - на телефоне есть отдельная кнопка Menu (в старых телефонах), нажатие которой вызывает меню. В новых устройствах отдельную кнопку убрали, заменив на значок меню в виде трёх вертикальных квадратных точек. Второй тип - контекстное меню, которое появляется при нажатии и удерживания пальца на экране в нужном месте (также можно нажать и удерживать центральную кнопку на телефоне). Контекстное меню в свою очередь может иметь подменю. Сегодня мы познакомимся с первым типом меню. В данной статье будет рассматриваться работа с меню на новых устройствах под управлением Android 4.0 и выше.
Вам не нужно напрягаться, чтобы создать меню, так как оно уже встроено по умолчанию при создании нового проекта. Давайте посмотрим, как оно работает.
Создайте новый проект и запустите его. Нажмите на значок меню в правой части заголовка, чтобы увидеть пункт менюSettings.
Попробуем разобраться, как это устроено. Само слово Settings хранится в файле res/values/strings.xml под именемaction_settings. Давайте создадим ещё три новых элемента по такому же принципу:
Теперь найдите папку res/menu. В ней есть файл main.xml - имя указывает, что меню относится к основной активности MainActivity. Если вы будете создавать приложение с несколькими экранами, то у каждой активности будет отдельное меню со своими настройками. Пока откроем файл main.xml для изучения:
Как не трудно догадаться, элемент item отвечает за отдельный пункт меню. Добавим ещё три пункта по такому же принципу, меняя только идентификатор и текст для меню:
Запустите проект и попробуйте снова вызвать меню. Вы увидите три новых пункта.
Пока пункты меню не выполняют полезной работы. Любое нажатие на пункт просто закрывает меню без видимых последствий. Мы ещё не написали код для обработки нажатий. Откроем файл MainActivity.java и изучим его.
В нём вы уже видели код для метода onCreateOptionsMenu(). Именно данный метод отвечает за появление меню у активности. Закомментируйте вызов метода и убедитесь, что меню не будет выводиться.
В методе inflate() вы указываете на ресурс меню (R.menu.main) и объект Menu. Вся подготовительная работа сделана за вас и вам не нужно ничего помнить, забивая голову подробностями.
Выбор пунктов меню.
Мы научились создавать меню. Но пока оно бесполезно, так как пункты меню никак не реагируют на наши нажатия. Для обработки нажатий пунктов меню служит метод onOptionsItemSelected(). В Eclipse выбираем меню Source | Override/Implement Methods... и ищем в списке нужный метод (можно набрать на клавиатуре несколько первых символов имени метода для быстрого поиска). Отмечаем флажком нужный метод и нажимаем кнопку OK.
Появится заготовка для метода. Метод распознаёт пункт, выбранный пользователем, через параметр MenuItem. Мы можем теперь определить выбранный пункт через вызов метода getItemId(), который возвращает идентификатор пункта меню. Далее через оператор switch нам остаётся определить нужные команды:
Запустите приложение, вызовите меню и выберите любой пункт меню. В текстовом поле должно появиться сообщение.
Существует ещё альтернативный способ через XML, похожий на обработку щелчков кнопки (начиная с Android 3.0). Вы можете добавить атрибут android:onClick в ресурсах меню, и вам уже не нужно использовать вызова методаonOptionsItemSelected(). При помощи android:onClick вы можете указать нужный метод при выборе пункта меню. Добавьте данный атрибут к пункту Settings
Теперь в коде активности напишем следующее: