Jetpack Compose中导航时是否可禁用CrossFade动画?
在Jetpack Compose导航中禁用CrossFade动画的可能性?
你观察得完全正确!目前在Jetpack Compose的原生导航组件里,CrossFade动画是硬编码实现的,官方并没有提供直接的配置选项来禁用它。我特意去核对了源码,这块的动画逻辑确实是写死的,没法通过简单的参数开关来关闭。
另外,针对你提到的Accompanist库中的AnimatedNavHost,我也仔细检查了它的API和实现,同样没有内置的选项来关闭这个CrossFade过渡动画。
如果你的场景必须去掉这个动画效果,其实可以通过自定义导航过渡来实现:
- 在使用原生
NavHost时,你可以在navigate方法的navOptions里,把所有过渡动画都设置为无动画状态:navController.navigate("target_route") { enterTransition = EnterTransition.None exitTransition = ExitTransition.None popEnterTransition = EnterTransition.None popExitTransition = ExitTransition.None } - 要是用的是Accompanist的
AnimatedNavHost,可以在composable的transitionSpec参数里指定无动画的过渡规则:AnimatedNavHost(navController, startDestination = "home") { composable("home") { HomeScreen() } composable( route = "detail", transitionSpec = { EnterTransition.None with ExitTransition.None } ) { DetailScreen() } }
这样就能达到禁用CrossFade动画的效果啦。
内容的提问来源于stack exchange,提问作者Ako Time
相关产品推荐
相关产品推荐

