12

J'utilise la barre d'action dans mon application Android, et j'utilise l'animation glisser pendant la transition de l'activité, en appelant:Maintenir Barre d'action stable au cours de l'activité de transition d'animation

startActivityForResult(i, ALL_OK); 
overridePendingTransition(R.anim.slide_in, R.anim.slide_out); 

où dans mes fichiers xml j'ai le le code suivant:

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

et

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

L'animation est exécutée avec succès, b La diapositive inclut également la barre d'action.

Y a-t-il un moyen pour que la barre d'action reste stable pendant la transition d'activité?

+0

duplication possible de [Transition entre les activités sans déplacer la barre d'action] (http://stackoverflow.com/questions/11904758/transitioning-between-activities-with-moving-actionbar) –

Répondre

13

Y a-t-il un moyen pour que la barre d'action reste stable pendant la transition d'activité?

Non, désolé. Si vous passez d'une activité à une autre, toute l'interface utilisateur change, la barre d'action et tout. Si votre comportement d'interface utilisateur souhaité est essentiel, réécrivez votre application pour avoir une activité et plusieurs fragments, et utilisez des animations pour la transition entre les fragments.

+0

Je pense que je vais devoir être d'accord avec vous. .. la façon dont la hiérarchie de vue Android fonctionne, rend ce que je veux impossible. mais je pourrais utiliser des fragments ou voir la transition à la place ... merci pour votre réponse. – NickPro

+0

@CommonsWare est-il possible d'animer la barre d'action tout en changeant l'activité? comme barre d'action sera rester stable. et menu r chaging .. – Asthme

+0

@Asthme: Comme la réponse indique, non. Utilisez des fragments. – CommonsWare

4

Il peut être fait dans Android Lollipop en utilisant Activity Transition Animations, en utilisant la même mise en page de la barre d'action dans toutes les activités et la définition de la barre d'action pour être un élément commun de la manière suivante:

Tout d'abord, assurez-vous permettre des transitions d'activité dans v21/styles.xml et utiliser le thème NoActionBar afin que vous puissiez créer une barre d'action personnalisée:

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

Définissez ensuite votre app_bar_transform.xml être changeBounds comme ceci:

<?xml version="1.0" encoding="utf-8"?> 
<transitionSet> 
    <changeBounds/> 
</transitionSet> 

Étant donné que la disposition de la barre d'application est la même dans toutes les activités, aucune transformation ne se produit.

Dans votre mesure AppBarLayout définir l'androïde: attribut transitionName:

<android.support.design.widget.AppBarLayout 
    ... 
    android:id="@+id/app_bar" 
    android:transitionName="appBar" 
    ... 
</android.support.design.widget.AppBarLayout> 

Utilisez cette disposition pour la barre d'action dans toutes vos activités:

<include layout="@layout/app_bar"/> 

Ensuite, lorsque vous voulez démarrer la activité suivante définir la disposition de la barre d'application en tant que un élément partagé comme celui-ci:

final Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
ActivityOptions options = null; 
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
    AppBarLayout appBar = (AppBarLayout) findViewById(R.id.app_bar); 
    options = ActivityOptions.makeSceneTransitionAnimation(WelcomeActivity.this, appBar, "appBar"); 
} 
ActivityCompat.startActivity(WelcomeActivity.this, intent, options != null ? options.toBundle() : null); 

Cela permet de maintenir la barre d'applications en place lors de la transition entre les activités.

+1

en utilisant 'ActivityOptionsCompat' et' ActivityCompat.startActivity() 'vous pouvez éviter cette condition' if' et rendre votre code plus propre – gldraphael

+0

Merci @gldraphael, j'ai édité la réponse pour utiliser 'ActivityCompat.startActivity()'. Malheureusement, 'ActivityOptions.makeSceneTransitionAnimation()' nécessite Lollipop donc l'instruction 'if' est toujours là. –

+0

Vous pouvez utiliser ActivityOptionsCompat.makeSceneTransitionAnimation –

Questions connexes