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

На Android 5.0 Lollipop,

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

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

Спасибо!


comment
Рассмотрите возможность использования панели инструментов, представленной в Lollipop, для большей гибкости при работе с заголовком.   -  person tambykojak    schedule 26.12.2014
comment
Поскольку вы используете анимацию окон, она также применяется к панели действий. Я бы предложил использовать фрагмент и анимировать его снизу вверх.   -  person nikhil.thakkar    schedule 26.12.2014


Ответы (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");

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

Дополнительную информацию см. в этом сообщении.

person Alex Lockwood    schedule 26.12.2014
comment
Что такое слайд-переход? - person Dinesh T A; 12.03.2015
comment
Я переименовал slideTransition в enterTransition в своем ответе. Причина, по которой я назвал это slideTransition, заключалась в том, что ОП спросил о том, как реализовать скользящий переход ввода. - person Alex Lockwood; 13.03.2015
comment
Есть ли способ указать этот тип ограничения в формате xml? - person avlacatus; 16.03.2015
comment
@avalactus Если вы используете библиотеку AppCompat v7, я думаю, вы можете исключить панель действий, добавив <targets><target android:excludeId="@id/action_bar_container"/></targets> в XML вашего перехода. - person Alex Lockwood; 16.03.2015
comment
Это не работает для меня! У меня включен AppCompat v7, и я дословно следовал инструкциям, но панель инструментов все еще анимируется. - person ; 26.01.2016
comment
Ссылка на публикацию в Google+ устарела. - person Sumit Shukla; 10.07.2019

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

<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>

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

person rekire    schedule 21.03.2016
comment
Возможно, это сработало бы лучше, если бы было 2 перехода слайда, один для входа и один для выхода — скольжение в противоположных направлениях. Это помогло мне. - person Richard Le Mesurier; 21.02.2017