Наложение панели действий

По умолчанию панель действий отображается в верхней части окна деятельности, слегка уменьшая пространство, доступное для остальной части макета вашей деятельности. Если, в ходе взаимодействия с пользователем, вы хотите скрыть или показать панель действий, вы можете сделать это вызвав hide() и show() на ActionBar. Однако, это заставляет вашу деятельность пересчитать и перерисовать макет, основанный на его новом размере.

Рисунок 1. Панель действий Галереи в режиме наложения.

Чтобы избежать изменения размера макета, когда панель действий скрывается и показывается, вы можете включить режим наложения для панели действий. В режиме наложения, ваш макет использует все доступное пространство, как если бы панели действий не было, и система рисует панель действий перед макетом. Это затемняет некоторую часть макета в верху, но теперь, когда панель действий скрывается или появляется, системе не нужно изменять размер макета и переключение становится плавным.

Полезный совет: Если вы хотите, чтобы ваш макет быть частично виден из-за панели действий, создайте пользовательский стиль для панели действий с частично прозрачным фоном, таким как показано на рисунке 1. Для получения информации о том, как определить фон панели действий, читайте Стилизация панели действий.

Включить режим наложения

Чтобы включить режим наложения для панели действий, вам необходимо создать собственную тему, которая расширяет существующую тему панели действий, и установить android:windowActionBarOverlay свойство в true.

Только для Android 3.0 и выше

Если ваш minSdkVersion установлен в 11 или выше, пользовательская тема должна использовать Theme.Holo тему (или одну из её потомков) в качестве родительской темы. Например:

<resources>
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme"
           parent="@android:style/Theme.Holo">
        <item name="android:windowActionBarOverlay">true</item>
    </style>
</resources>

Для Android 2.1 и выше

Если ваше приложение использует Библиотеку поддержки для совместимости на устройствах под управлением Android версии ниже 3.0, пользовательская тема должна использовать Theme.AppCompat тему (или одну из её потомков) в качестве родительской темы. Например:

<resources>
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme"
           parent="@android:style/Theme.AppCompat">
        <item name="android:windowActionBarOverlay">true</item>

        <!-- Support library compatibility -->
        <item name="windowActionBarOverlay">true</item>
    </style>
</resources>

Также обратите внимание, что эта тема включает в себя два определения для windowActionBarOverlay стиля: одно с android: префиксом и второе без. Тот, что с android: префиксом для версий Android, которые включают стиль в платформе, и второе без префикса для старых версий, которые берут стиль из Библиотеки поддержки.

Укажите верхнюю границу макета

Когда панель действий в режиме наложения, это может затемнять некоторую часть макета, которая должна оставаться видимой. Для того, чтобы такие элементы оставались ниже панели действий все время, добавьте либо поле (margin) или заполнение (padding) для верхней части представления с помощью высоты, указанной actionBarSize. Например:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="?android:attr/actionBarSize">
    ...
</RelativeLayout>

Если вы используете Библиотеку поддержки для панели действий, необходимо удалить android: префикс. Например:

<!-- Support library compatibility -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="?attr/actionBarSize">
    ...
</RelativeLayout>

В этом случае, ?attr/actionBarSize значение без префикса работает на всех версиях, включая Android 3.0 и выше.