Как я могу исключить ActionBar при переходах между действиями на Android 5.0

На Android 5.0 Lollipop,

У меня есть два действия A и B. У действия B есть скользящий переход снизу с наложенной панелью действий, но когда B показывает, панель действий также скользит снизу вверх.

Как я могу предотвратить действие панели из слайд-перехода. системная панель действий имеет идентификатор, который я могу добавить к цели исключения?

Спасибо!

2 ответа

Решение

Если вы используете библиотеку AppCompat v7, это легко:

View decor = getWindow().getDecorView();
int actionBarId = R.id.action_bar_container;
enterTransition.excludeTarget(decor.findViewById(actionBarId), true);

К сожалению, идентификатор представления контейнера панели действий не является частью общедоступного API, поэтому, если вы не используете библиотеку AppCompat v7 (т.е. вы используете официальные библиотеки фреймворка), вам придется обойти эту проблему, используя следующий код для извлечения идентификатор вместо:

int actionBarId = getResources().getIdentifier("action_bar_container", "id", "android");

Обратите внимание, что этот код будет поврежден, если имя ID контейнера панели действий изменится в будущей версии Android. Я сомневаюсь, что это когда-нибудь изменится, хотя...

Смотрите этот пост для некоторой другой связанной информации.

Мое решение состоит в том, чтобы расширить стиль с помощью следующих аргументов:

<item name="android:windowActivityTransitions">true</item>
<item name="android:windowContentTransitions">true</item>
<item name="android:windowEnterTransition">@transition/slide</item>
<item name="android:windowExitTransition">@transition/slide</item>
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item>
<item name="android:windowSharedElementEnterTransition">@transition/enter</item>
<item name="android:windowSharedElementExitTransition">@transition/enter</item>

Это мой res/transition/slide.xml:

<?xml version="1.0" encoding="utf-8"?>
<slide xmlns:android="http://schemas.android.com/apk/res/android" android:slideEdge="bottom">
    <targets>
        <target android:excludeId="@android:id/statusBarBackground"/>
        <target android:excludeId="@android:id/navigationBarBackground"/>
    </targets>
</slide>

Это мой res/transition/enter.xml:

<?xml version="1.0" encoding="utf-8"?>
<transitionSet
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:targetSdkVersion="19"
    android:transitionOrdering="sequential">
    <targets>
        <target android:excludeId="@id/action_bar_container"/>
        <target android:excludeId="@android:id/statusBarBackground"/>
    </targets>
    <changeBounds/>
    <changeTransform/>
    <changeClipBounds/>
    <changeImageTransform/>
</transitionSet>

Вы можете играть с этими переходами так, как вам нравится, важны только те исключенные цели.