Добавление командных кнопок

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

Рисунок 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>

Это объявляет, что действие Поиска должно появиться как кнопка действия, когда есть место в панели действий, но действие Настройки должно всегда проявляться в переполнении. (По умолчанию, все действия отображаются в переполнении, но хорошая практика явно объявлять ваши дизайнерские намерения для каждого действия.)

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, когда пользователь нажимает кнопку Вверх , система переходит к родительской деятельности в соответствующих случаях—вы не должны обрабатывать Вверх событие кнопки.

Дополнительные сведения о навигации Вверх, см. Предоставление навигации Вверх.