如何在Android 5.0上的活动之间转换时排除ActionBar

tin*_*yao 8 android android-actionbar android-5.0-lollipop activity-transition shared-element-transition

在Android 5.0 Lollipop上,

我有两个活动A和B.活动B有一个slie从底部进入过渡带有Overlay ActionBar,但是当B显示时,ActionBar也从下到上滑动.

如何阻止动作栏进行幻灯片切换.系统操作栏有一个我可以添加到排除目标的ID吗?

谢谢!

Ale*_*ood 10

如果您使用的是AppCompat v7库,则很容易:

View decor = getWindow().getDecorView();
int actionBarId = R.id.action_bar_container;
enterTransition.excludeTarget(decor.findViewById(actionBarId), true);
Run Code Online (Sandbox Code Playgroud)

不幸的是,操作栏容器视图ID不是公共API的一部分,因此如果您不使用AppCompat v7库(即您使用的是官方框架库),则需要使用以下代码来检索它ID代替:

int actionBarId = getResources().getIdentifier("action_bar_container", "id", "android");
Run Code Online (Sandbox Code Playgroud)

请注意,如果操作栏容器的ID名称在未来的Android版本中发生更改,则此代码将中断.我怀疑它会改变......

有关其他相关信息,请参阅此帖子.

  • 这不适合我!我启用了AppCompat v7,并且我逐字按照说明操作,但工具栏仍然是动画. (3认同)
  • @avalactus如果你使用的是AppCompat v7库,我相信你可以通过在转换的XML中添加`<targets> <target android:excludeId ="@ id/action_bar_container"/> </ targets>`来排除操作栏. (2认同)

rek*_*ire 6

我的解决方案是使用这个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>
Run Code Online (Sandbox Code Playgroud)

这是我的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>
Run Code Online (Sandbox Code Playgroud)

这是我的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>
Run Code Online (Sandbox Code Playgroud)

您可以根据需要随意使用这些过渡,重要的是那些被排除的目标.