Comment définir les animations par défaut pour les actions de Navigation?

J'utilise Android Studio 3.2 Canary 14 et La Composante De L'Architecture De Navigation. Avec cela, vous pouvez définir des animations de transition à peu près comme vous le feriez en utilisant Intents.

Mais les animations sont définies comme des propriétés des actions de la navigation graphique, comme suit:

<fragment
    android:id="@+id/startScreenFragment"
    android:name="com.example.startScreen.StartScreenFragment"
    android:label="fragment_start_screen"
    tools:layout="@layout/fragment_start_screen" >
  <action
    android:id="@+id/action_startScreenFragment_to_findAddressFragment"
    app:destination="@id/findAddressFragment"
    app:enterAnim="@animator/slide_in_right"
    app:exitAnim="@animator/slide_out_left"
    app:popEnterAnim="@animator/slide_in_left"
    app:popExitAnim="@animator/slide_out_right"/>
</fragment>

Cela devient fastidieux de définir pour toutes les actions dans le graphique!

y a-t-il une façon de définir un ensemble d'animations par défaut, sur les actions?

Je n'ai pas eu de chance en utilisant des styles pour ça.

18
demandé sur DAA 2018-05-23 10:16:04

2 réponses

R. anim a les animations par défaut définies (comme finales):

  • nav_default_enter_anim

  • nav_default_exit_anim

  • nav_default_pop_enter_anim

  • nav_default_pop_exit_anim

pour modifier ce comportement, vous devez utiliser custom NavOptions,

parce que c'est là que l'animation est assignée à un NavAction.

on peut assigner à ces NavOptions.Builder:

protected NavOptions getNavOptions() {

    NavOptions navOptions = NavOptions.Builder()
      .setEnterAnim(R.anim.default_enter_anim)
      .setExitAnim(R.anim.default_exit_anim)
      .setPopEnterAnim(R.anim.default_pop_enter_anim)
      .setPopExitAnim(R.anim.default_pop_exit_anim)
      .build();

    return navOptions;
}

il est fort probable qu'il faille créer un DefaultNavFragment, qui étend la classe androidx.navigation.fragment (la documentation ne semble pas encore terminé).

alternativement... lorsque l'on regarde le attrs.xml de ce paquet; ces animations style-mesure:

<resources>
    <declare-styleable name="NavAction">
        <attr name="enterAnim" format="reference"/>
        <attr name="exitAnim" format="reference"/>
        <attr name="popEnterAnim" format="reference"/>
        <attr name="popExitAnim" format="reference"/>
        ...
    </declare-styleable>
</resources>

cela signifie qu'on peut définissez les styles selon - et définissez-les, dans le cadre du thème...

on peut les définir dans le styles.xml:

<style name="Theme.Default" parent="Theme.AppCompat.Light.NoActionBar">

    <!-- these should be the correct ones -->
    <item name="NavAction_enterAnim">@anim/default_enter_anim</item>
    <item name="NavAction_exitAnim">@anim/default_exit_anim</item>
    <item name="NavAction_popEnterAnim">@anim/default_pop_enter_anim</item>
    <item name="NavAction_popExitAnim">@anim/default_pop_exit_anim</item>

</style>
4
répondu Martin Zeitler 2018-09-23 21:04:23

Comme l'a dit, R. anim a le défaut animations définies:

  • nav_default_enter_anim

  • nav_default_exit_anim

  • nav_default_pop_enter_anim

  • nav_default_pop_exit_anim

Mais vous pouvez facilement les remplacer.

il suffit de créer vos propres quatre ressources anim avec les mêmes noms dans votre module app (pour clarifier, l'id de l'une d'entre elles est your.package.name.R.anim.nav_default_enter_anim) et écrivez Quelle animation vous voulez.

0
répondu nbaroz 2018-09-26 07:16:49