Android Studio: уроки на Kotlin. Добавляем меню в приложение

Почти в каждой программе есть меню: три точки в углу экрана, нажав на которые, открывается список действий. Через него делают настройки, открывают справку или выполняют другие полезные команды. Сегодня в Android Studio мы научимся добавлять такое меню в приложение и обрабатывать нажатия. Писать будем на языке Kotlin, а весь урок построен так, чтобы вы легко повторили всё на своём проекте.


Зачем нужно меню и каким оно бывает

Меню экономит место на экране. Вместо того чтобы загромождать интерфейс кнопками, разработчики прячут редко используемые действия в выпадающий список. В Android существует несколько видов меню: самое частое — Options Menu, которое появляется в верхней панели при нажатии на три точки. Есть ещё контекстное меню (по долгому нажатию) и всплывающее, но начинать лучше с самого простого.


Шаг 1: Создаём файл меню

Ресурсы меню хранятся в папке res/menu. Если такой папки ещё нет, создайте её: щёлкните правой кнопкой по res и выберите New → Android Resource Directory, в поле Resource type укажите menu. Затем внутри создайте новый файл с именем main_menu.xml. В нём мы опишем пункты меню.

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/action_settings"
        android:title="Настройки" />
    <item
        android:id="@+id/action_about"
        android:title="О программе" />
</menu>

Каждый пункт имеет свой id, чтобы мы могли отличить его в коде, и текст, который увидит пользователь. Позже можно добавить иконки, но сейчас обойдёмся без них.


Шаг 2: Подключаем меню к Activity

Теперь откройте файл MainActivity.kt. Чтобы меню появилось на экране, нужно переопределить метод onCreateOptionsMenu. Внутри мы «надуваем» наш XML-файл с помощью MenuInflater.

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.main_menu, menu)
    return true
}

Возвращая true, мы говорим системе, что меню готово к показу. Если вернуть false, меню не появится. Теперь при запуске в правом верхнем углу появятся три точки, а внутри — наши два пункта.


Шаг 3: Обрабатываем выбор пункта

Мало просто показать список — нужно реагировать на касания. Для этого переопределим метод onOptionsItemSelected. Он получает объект MenuItem, у которого можно узнать id и выполнить нужное действие.

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    return when (item.itemId) {
        R.id.action_settings -> {
            Toast.makeText(this, "Открываем настройки", Toast.LENGTH_SHORT).show()
            true
        }
        R.id.action_about -> {
            Toast.makeText(this, "Версия 1.0", Toast.LENGTH_SHORT).show()
            true
        }
        else -> super.onOptionsItemSelected(item)
    }
}

Здесь при выборе «Настройки» или «О программе» показывается короткое всплывающее сообщение. В реальном приложении вы можете открыть новое Activity, показать диалог или выполнить другое действие.


Шаг 4: Добавляем иконки (бонус)

Если хочется, чтобы у пунктов меню были иконки, добавьте атрибут android:icon в файле main_menu.xml. Например, android:icon="@android:drawable/ic_menu_preferences" для настроек. По умолчанию Android показывает значки только у одного-двух пунктов, но для постоянного отображения иконок можно использовать специальные флаги, но это уже тема для продвинутого урока.


Несколько полезных советов

  • Не перегружайте меню. Три-четыре пункта — оптимально. Всё остальное лучше вынести в отдельный экран настроек.
  • Используйте понятные названия. «Настройки» и «О программе» — классика. Избегайте длинных фраз, которые не влезут в узкую панель.
  • Возвращайте true. Если вы обработали нажатие, обязательно верните true из onOptionsItemSelected, иначе система решит, что пункт не обработан, и ничего не произойдёт.

Итог

Сегодня в Android Studio мы освоили добавление меню в приложение. Вы создали XML-файл с пунктами, подключили его к Activity и научились обрабатывать выбор пользователя. Теперь ваша программа может предлагать дополнительные действия, не занимая лишнего места на экране. Попробуйте добавить третий пункт, который, например, очищает текст на экране — это закрепит понимание и сделает меню по-настоящему полезным.