如何禁用工具栏导航按钮动画
How to disable toolbar navigation button animation
我正在使用带导航 UI 的工具栏,当从 top-level 目的地导航到任何其他目的地时,导航按钮显示为向上按钮并且标题向右移动。
单击返回时,工具栏导航图标会隐藏,标题会返回到工具栏的开头,并带有幻灯片动画。
var appBarConfiguration = AppBarConfiguration.Builder(
setOf(
R.id.homeFragment,
R.id.moreOptionsFragment,
R.id.accountDetailsFragment
)
).build()
navController = findNavController(R.id.navHostMain)
binding.bottomNavView.setupWithNavController(navController)
NavigationUI.setupWithNavController(toolbar, navController, appBarConfiguration)[enter image description here][1]
如何在返回 top-level 片段时禁用标题 上的动画?
如果您在 activity 中使用工具栏,您可以通过在 activity 中调用 setSupportActionBar
将工具栏设置为支持操作栏,然后使用导航设置操作栏通过调用 NavigationUI.setupActionBarWithNavController
.
控制器
你得到动画是因为 NavigationUI 使用 ToolbarOnDestinationChangedListener
class 如果你用工具栏设置它,这个 class 有以下方法:
@Override
protected void setNavigationIcon(Drawable icon,
@StringRes int contentDescription) {
Toolbar toolbar = mToolbarWeakReference.get();
if (toolbar != null) {
boolean useTransition = icon == null && toolbar.getNavigationIcon() != null;
toolbar.setNavigationIcon(icon);
toolbar.setNavigationContentDescription(contentDescription);
if (useTransition) {
TransitionManager.beginDelayedTransition(toolbar);
}
}
}
如您所见,此方法使用 TransitionManager
动画移除导航图标,但它也会影响标题。我不认为你可以禁用它。
我正在使用带导航 UI 的工具栏,当从 top-level 目的地导航到任何其他目的地时,导航按钮显示为向上按钮并且标题向右移动。 单击返回时,工具栏导航图标会隐藏,标题会返回到工具栏的开头,并带有幻灯片动画。
var appBarConfiguration = AppBarConfiguration.Builder(
setOf(
R.id.homeFragment,
R.id.moreOptionsFragment,
R.id.accountDetailsFragment
)
).build()
navController = findNavController(R.id.navHostMain)
binding.bottomNavView.setupWithNavController(navController)
NavigationUI.setupWithNavController(toolbar, navController, appBarConfiguration)[enter image description here][1]
如何在返回 top-level 片段时禁用标题 上的动画?
如果您在 activity 中使用工具栏,您可以通过在 activity 中调用 setSupportActionBar
将工具栏设置为支持操作栏,然后使用导航设置操作栏通过调用 NavigationUI.setupActionBarWithNavController
.
你得到动画是因为 NavigationUI 使用 ToolbarOnDestinationChangedListener
class 如果你用工具栏设置它,这个 class 有以下方法:
@Override
protected void setNavigationIcon(Drawable icon,
@StringRes int contentDescription) {
Toolbar toolbar = mToolbarWeakReference.get();
if (toolbar != null) {
boolean useTransition = icon == null && toolbar.getNavigationIcon() != null;
toolbar.setNavigationIcon(icon);
toolbar.setNavigationContentDescription(contentDescription);
if (useTransition) {
TransitionManager.beginDelayedTransition(toolbar);
}
}
}
如您所见,此方法使用 TransitionManager
动画移除导航图标,但它也会影响标题。我不认为你可以禁用它。