Панель приложения позволяет добавлять кнопки для действий пользователя. Эта функция позволяет разместить наиболее важные действия для текущего контекста в верхней части приложения. Например, приложение для просмотра фотографий может отображать кнопки «Поделиться» и «Создать альбом» вверху, когда пользователь просматривает свою фотоальбом. Когда пользователь просматривает отдельную фотографию, приложение может отображать кнопки обрезки и фильтрации .
Пространство в панели приложения ограничено. Если приложение объявляет больше действий, чем может поместиться на панели приложения, панель приложения отправляет лишние действия в дополнительное меню. Приложение также может указать, чтобы действие всегда отображалось в дополнительном меню, а не на панели приложения.
![Изображение «Сейчас в приложении Android» со значком на панели действий.](https://developer.android.com/static/images/ui/notifications/actions_actionbar.png?hl=ru)
Добавьте кнопки действий
Все кнопки действий и другие элементы, доступные в переполнении действий, определены в ресурсе XML-меню . Чтобы добавить действия на панель действий, создайте новый XML-файл в каталоге res/menu/
вашего проекта.
Добавьте элемент <item>
для каждого элемента, который вы хотите включить в панель действий, как показано в следующем примере XML-файла меню:
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <!-- "Mark Favorite", must appear as action button if possible. --> <item android:id="@+id/action_favorite" android:icon="@drawable/ic_favorite_black_48dp" android:title="@string/action_favorite" app:showAsAction="ifRoom"/> <!-- Settings, must always be in the overflow. --> <item android:id="@+id/action_settings" android:title="@string/action_settings" app:showAsAction="never"/> </menu>
Атрибут app:showAsAction
указывает, отображается ли действие в виде кнопки на панели приложения. Если вы установите app:showAsAction="ifRoom"
— как в любимом действии в примере кода — действие отображается в виде кнопки, если для него есть место на панели приложения. Если места недостаточно, лишние действия отправляются в дополнительное меню. Если вы установите app:showAsAction="never"
— как в примере действия настроек кода — действие всегда отображается в дополнительном меню и не отображается на панели приложения.
Система использует значок действия в качестве кнопки действия, если действие отображается на панели приложения. Вы можете найти много полезных иконок в Material Icons .
Реагировать на действия
Когда пользователь выбирает один из элементов панели приложения, система вызывает метод обратного вызова onOptionsItemSelected()
вашей активности и передает объект MenuItem
, чтобы указать, какой элемент был нажат. В вашей реализации onOptionsItemSelected()
вызовите метод MenuItem.getItemId()
чтобы определить, какой элемент был нажат. Возвращаемый идентификатор соответствует значению, объявленному вами в атрибуте android:id
соответствующего элемента <item>
.
Например, следующий фрагмент кода проверяет, какое действие выбирает пользователь. Если метод не распознает действие пользователя, он вызывает метод суперкласса:
Котлин
override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) { R.id.action_settings -> { // User chooses the "Settings" item. Show the app settings UI. true } R.id.action_favorite -> { // User chooses the "Favorite" action. Mark the current item as a // favorite. true } else -> { // The user's action isn't recognized. // Invoke the superclass to handle it. super.onOptionsItemSelected(item) } }
Ява
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_settings: // User chooses the "Settings" item. Show the app settings UI. return true; case R.id.action_favorite: // User chooses the "Favorite" action. Mark the current item as a // favorite. return true; default: // The user's action isn't recognized. // Invoke the superclass to handle it. return super.onOptionsItemSelected(item); } }