How can i exclude ActionBar when transitions between Activities on Android 5.0

亡梦爱人 提交于 2019-12-28 15:37:31

问题


On Android 5.0 Lollipop,

I have two activities A and B. Activity B has a slie enter transition from bottom with a Overlay ActionBar, but when B shows, the ActionBar also slide from bottom to top.

How can i prevent the actionbar from slide transition. does system actionbar has an id that i can add to the exclude target ?

thanks!


回答1:


If you are using the AppCompat v7 library, it is easy:

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

Unfortunately, the action bar container view ID is not part of the public API, so if you are not using the AppCompat v7 library (i.e. you are using the official framework libraries) you will need to work around this by using the following code to retrieve the ID instead:

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

Note that this code will break if the action bar container's ID name changes in a future version of Android. I doubt it will ever change though...

See this post for some other related information.




回答2:


My solution is to extend the style with this args:

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

This here is my 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>

This here is my 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>

You can play around with that transitions as you like, important is just those excluded targets.



来源:https://stackoverflow.com/questions/27658577/how-can-i-exclude-actionbar-when-transitions-between-activities-on-android-5-0

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!