我可以轻松地自定义android导航动作,就像这段代码一样,但是我无法自定义来自抽屉或底部导航和菜单的动作。
有没有办法自定义此操作?来自此configurantion setupActionBarWithNavController的动作?
<action
android:id="@+id/action_flow_step_two_dest_to_notificationsFragment"
app:destination="@id/notificationsFragment"
app:enterAnim="@anim/navigation_slide_in_right"
app:exitAnim="@anim/navigation_slide_out_left"
app:popEnterAnim="@anim/navigation_slide_in_left"
app:popExitAnim="@anim/navigation_slide_out_right" />
查看源代码,我注意到导航库在菜单导航发生时用默认动画替换每个动画。
public static boolean onNavDestinationSelected(@NonNull MenuItem item,
@NonNull NavController navController) {
NavOptions.Builder builder = new NavOptions.Builder()
.setLaunchSingleTop(true)
.setEnterAnim(R.anim.nav_default_enter_anim)
.setExitAnim(R.anim.nav_default_exit_anim)
.setPopEnterAnim(R.anim.nav_default_pop_enter_anim)
.setPopExitAnim(R.anim.nav_default_pop_exit_anim);
if ((item.getOrder() & Menu.CATEGORY_SECONDARY) == 0) {
builder.setPopUpTo(findStartDestination(navController.getGraph()).getId(), false);
}
NavOptions options = builder.build();
try {
//TODO provide proper API instead of using Exceptions as Control-Flow.
navController.navigate(item.getItemId(), null, options);
return true;
} catch (IllegalArgumentException e) {
return false;
}
}
您无法根据需要更改动画,但可以替换默认动画,您需要在动画文件中使用以下名称。
nav_default_enter_anim
nav_default_exit_anim
nav_default_pop_enter_anim
nav_default_pop_exit_anim