Ответ 1
У R.anim определены анимации по умолчанию (как окончательные):
-
nav_default_enter_anim
-
nav_default_exit_anim
-
nav_default_pop_enter_anim
-
nav_default_pop_exit_anim
чтобы изменить это поведение, вам придется использовать пользовательские NavOptions,
потому что именно там анимация назначается NavAction.
их можно назначить с помощью 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;
}
скорее всего, потребуется создать DefaultNavFragment
, который расширяет класс androidx.navigation.fragment (документация там пока не завершена).
альтернативно... при просмотре attrs.xml
этого пакета; эти анимации стиль-возможности:
<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>
это означает, что можно определить соответствующие стили - и определить их, как часть темы...
их можно определить в 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>