Этот урок научит вас
- Указание действий в XML
- Добавьте действия на панель действий
- Ответить на кнопки действий
- Добавить кнопку Вверх для деятельности нижнего уровня
Вы также должны прочитать
Панель действий позволяет добавлять кнопки для наиболее важных действий, связанных с текущим контекстом приложения. Те, которые появляются непосредственно на панели действий с иконой и/или текстом известны как кнопки действий. Действия, которые не помещаются на панели действий или которые не являются достаточно важными, скрыты в переполнении действий.

Рисунок 1. Панель действий с кнопкой для поиска и переполнением действий, который показывает дополнительные действия.
Указание действий в XML
Все кнопки действий и другие элементы, доступные в переполнении действий определяются в XML ресурс меню. Для добавления действий в панель действий, создайте новый XML файл в вашем проекте в res/menu/
каталоге.
Добавьте <item>
элемент для каждого элемента, который вы хотите включить в панель действий. Например:
res/menu/main_activity_actions.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <!-- Search, should appear as action button --> <item android:id="@+id/action_search" android:icon="@drawable/ic_action_search" android:title="@string/action_search" android:showAsAction="ifRoom" /> <!-- Settings, should always be in the overflow --> <item android:id="@+id/action_settings" android:title="@string/action_settings" android:showAsAction="never" /> </menu>
Скачайте иконки для панели действий
Для наилучшего соответствия Android иконография (руководящие принципы), вы должны использовать иконки, входящие в Набор иконок для панели действий.
Это объявляет, что действие Поиска должно появиться как кнопка действия, когда есть место в панели действий, но действие Настройки должно всегда проявляться в переполнении. (По умолчанию, все действия отображаются в переполнении, но хорошая практика явно объявлять ваши дизайнерские намерения для каждого действия.)
icon
атрибут требует идентификатор ресурса изображения. Имя, которое следует за @drawable/
должно быть именем растрового изображения, которое вы сохранили в вашем проекте в res/drawable/
каталоге. Например, "@drawable/ic_action_search"
указывает на ic_action_search.png
. Аналогично, title
атрибут использует строковый ресурс, который определен в XML файле в вашем проекте в res/values/
каталоге, как описано в Построение простого пользовательского интерфейса.
Примечание: При создании иконок и других растровых изображений для вашего приложения, важно, что бы вы предоставляли несколько версий, каждая из которых оптимизирована для различной плотности экрана. Это обсуждается более детально в уроке Поддержка различных экранов.
Если ваше приложение использует Библиотеку Поддержки для совместимости версий, вплоть до Android 2.1, showAsAction
атрибут недоступен из android:
пространства имен. Вместо этого, атрибут предоставляется библиотекой поддержки и вы должны указать ваше собственное пространство имен XML, и использовать это пространство имен в качестве префикса атрибута. (Пользовательское пространство имен XML должно быть основано на имене вашего приложения, но может быть любым именем, которое вы захотите, и доступно только в рамках файла, в котором оно объявлено). Например:
res/menu/main_activity_actions.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:yourapp="http://schemas.android.com/apk/res-auto" > <!-- Search, should appear as action button --> <item android:id="@+id/action_search" android:icon="@drawable/ic_action_search" android:title="@string/action_search" yourapp:showAsAction="ifRoom" /> ... </menu>
Добавьте действия на панель действий
Для размещения пунктов меню в панели действий, реализуйте onCreateOptionsMenu()
метод обратного вызова в вашей деятельности, чтобы наполнить ресурс меню через полученный Menu
объект. Например:
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu items for use in the action bar MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_activity_actions, menu); return super.onCreateOptionsMenu(menu); }
Ответить на кнопки действий
Когда пользователь нажимает на одну из кнопок действий или другой элемент в переполнении действий, система вызывает в вашей деятельности onOptionsItemSelected()
метод обратного вызова. В вашей реализации этого метода, вызовите getItemId()
у переданного MenuItem
для определения, какой элемент была нажата—возвращаемый идентификатор соответствует значению, которое вы объявили в соответствующем <item>
элементе в android:id
атрибуте.
@Override public boolean onOptionsItemSelected(MenuItem item) { // Handle presses on the action bar items switch (item.getItemId()) { case R.id.action_search: openSearch(); return true; case R.id.action_settings: openSettings(); return true; default: return super.onOptionsItemSelected(item); } }
Добавить кнопку Вверх для деятельности нижнего уровня

Рисунок 4. Вверх кнопка в Gmail.
Все экраны в вашем приложении, кроме главного входа в ваше приложение (деятельности, которые не являются "домашним" экраном) должны предложить пользователю способ навигации на экран логического родителя в иерархии приложения, нажав кнопку Вверх на панели действий.
При работе с Android 4.1 (Уровень API 16) или выше, или при использовании ActionBarActivity
из Библиотеки Поддержки, выполнение навигации Вверх просто требует, чтобы вы объявили родительскую деятельность в файле манифеста и включили кнопку Вверх для панели действий.
Например, вот как можно объявить родителя деятельности в манифесте:
<application ... > ... <!-- The main/home activity (it has no parent activity) --> <activity android:name="com.example.myfirstapp.MainActivity" ...> ... </activity> <!-- A child of the main activity --> <activity android:name="com.example.myfirstapp.DisplayMessageActivity" android:label="@string/title_activity_display_message" android:parentActivityName="com.example.myfirstapp.MainActivity" > <!-- Parent activity meta-data to support 4.0 and lower --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.myfirstapp.MainActivity" /> </activity> </application>
Затем включите значок приложения в качестве кнопки Вверх вызвав setDisplayHomeAsUpEnabled()
:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_displaymessage); getSupportActionBar().setDisplayHomeAsUpEnabled(true); // If your minSdkVersion is 11 or higher, instead use: // getActionBar().setDisplayHomeAsUpEnabled(true); }
Поскольку система теперь знает, что MainActivity
является родительской деятельностью для DisplayMessageActivity
, когда пользователь нажимает кнопку Вверх , система переходит к родительской деятельности в соответствующих случаях—вы не должны обрабатывать Вверх событие кнопки.
Дополнительные сведения о навигации Вверх, см. Предоставление навигации Вверх.