8

在 Android 5.0 Lollipop 上,

我有两个活动 A 和 B。活动 B 有一个从底部使用 Overlay ActionBar 的 slie enter 过渡,但是当 B 显示时,ActionBar 也从底部滑动到顶部。

如何防止操作栏滑动过渡。系统操作栏有我可以添加到排除目标的 id 吗?

谢谢!

4

2 回答 2

9

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

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

不幸的是,操作栏容器视图 ID 不是公共 API 的一部分,因此如果您没有使用 AppCompat v7 库(即您使用的是官方框架库),您将需要使用以下代码来解决这个问题来检索ID 改为:

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

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

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

于 2014-12-26T21:33:42.080 回答
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>

这是我的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>

您可以随意使用这些转换,重要的是那些被排除的目标。

于 2016-03-21T20:08:23.243 回答