Android 在活动转换动画期间保持动作栏稳定

Android 在活动转换动画期间保持动作栏稳定,android,android-activity,android-actionbar,android-animation,Android,Android Activity,Android Actionbar,Android Animation,我在Android应用程序中使用动作栏,在活动转换期间使用滑动动画,方法是调用: startActivityForResult(i, ALL_OK); overridePendingTransition(R.anim.slide_in, R.anim.slide_out); 其中,在我的xml文件中,我有以下代码: <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate and

我在Android应用程序中使用动作栏,在活动转换期间使用滑动动画,方法是调用:

startActivityForResult(i, ALL_OK);
overridePendingTransition(R.anim.slide_in, R.anim.slide_out);
其中,在我的xml文件中,我有以下代码:

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
 <translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="400"/>  
</set>


动画已成功执行,但幻灯片还包括动作栏

有没有一种方法可以使动作栏在活动转换期间保持稳定

有没有一种方法可以使动作栏在活动转换期间保持稳定

不,对不起。如果在活动之间切换,则整个UI、操作栏和所有内容都会发生更改


如果你想要的UI行为是必要的,请重写你的应用程序,使其具有一个活动和多个片段,并使用动画在片段之间进行转换。

可以在Android棒棒糖中使用,在所有活动中对操作栏使用相同的布局,并按以下方式将操作栏定义为共享元素:

首先,确保在v21/styles.xml中启用活动转换,并使用NoActionBar主题,以便可以创建自定义操作栏:

<style name="AppTheme.NoActionBar">
    ...
    <!-- enable window content transitions -->
    <item name="android:windowActivityTransitions">true</item>
    <!-- specify enter and exit transitions -->
    <item name="android:windowEnterTransition">@android:transition/slide_right</item>
    <item name="android:windowExitTransition">@android:transition/slide_left</item>
    <!-- specify shared element transitions -->
    <item name="android:windowSharedElementEnterTransition">@transition/app_bar_transform</item>
    <item name="android:windowSharedElementExitTransition">@transition/app_bar_transform</item>
</style>

这将在活动之间转换时保持应用程序栏的位置

我想我必须同意你的看法。。。android视图层次结构的工作方式,使我想要的变得不可能。但我可以用片段或视图转换来代替……谢谢你的回答。@commonware在更改活动时是否有可能设置动作栏的动画?像动作条一样,动作条将保持稳定。菜单的变化。@ashme:正如答案所述,不。使用片段。通过使用
activityoptions compat
ActivityCompat.startActivity()
可以避免
if
条件,并使代码更干净,我已将答案编辑为使用
ActivityCompat.startActivity()
。不幸的是,
ActivityOptions.makeSceneTransitionAnimation()
需要棒棒糖,因此
if
语句仍然存在。您可以使用ActivityOptions compat.makeSceneTransitionAnimation
<style name="AppTheme.NoActionBar">
    ...
    <!-- enable window content transitions -->
    <item name="android:windowActivityTransitions">true</item>
    <!-- specify enter and exit transitions -->
    <item name="android:windowEnterTransition">@android:transition/slide_right</item>
    <item name="android:windowExitTransition">@android:transition/slide_left</item>
    <!-- specify shared element transitions -->
    <item name="android:windowSharedElementEnterTransition">@transition/app_bar_transform</item>
    <item name="android:windowSharedElementExitTransition">@transition/app_bar_transform</item>
</style>
<?xml version="1.0" encoding="utf-8"?>
<transitionSet>
    <changeBounds/>
</transitionSet>
<android.support.design.widget.AppBarLayout 
    ...
    android:id="@+id/app_bar"
    android:transitionName="appBar"
    ...
</android.support.design.widget.AppBarLayout>
<include layout="@layout/app_bar"/>
final Intent intent = new Intent(getApplicationContext(), MainActivity.class);
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(MainActivity.this, toolbar, "appBar");
ActivityCompat.startActivity(WelcomeActivity.this, intent, options.toBundle());