使用 NavigationComponent 和 BottomNavigationView 隐藏工具栏后退箭头
Hide Toolbar back arrow with NavigationComponent and BottomNavigationView
我正在实施与 BottomNavigationView 结合的 NavigationComponent,我注意到工具栏中显示了所有片段目的地的后退箭头,导航图中指定为 startDestination
的片段目的地除外.
我能够找到的此实现的所有示例都显示出类似的行为。在我看来,为 BottomNavigationView 的每个关联片段隐藏后退箭头似乎是一种更自然的设计(点击工具栏中的后退箭头以从选项卡 2 导航到选项卡 1 对我来说感觉很奇怪,我以前从未见过这种情况) .
有关示例以及我希望实现的目标,请参见下图。 有什么方法可以做到这一点?
使用 getActionBar().setDisplayHomeAsUpEnabled(false)
从工具栏中删除 home/back 按钮
如果您使用的是 AppBarConfiguration
应该是这样的。
val appBarConfiguration = AppBarConfiguration(
setOf(
R.id.homeFragment,
R.id.dashboardFragment,
R.id.notificationsFragment
)
)
setupActionBarWithNavController(navController!!, appBarConfiguration!!)
这意味着您的所有片段都是顶级目的地。
注意,当您回击时,您将退出应用程序(或者如果配置到第一个片段,例如在 BottomSheet
s 中您会出现这种行为)。所以如果你需要另一种情况,你应该为每个片段
配置onBackPressed
删除向后箭头图标的简单方法是设置目标更改侦听器,如果
目的地 ID == R.id.fragmentYouWantRemoveArrawBack setNavigationIcon(null);
EX:
navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() {
@Override
public void onDestinationChanged(@NonNull NavController controller,
@NonNull NavDestination destination,
@Nullable Bundle arguments) {
if (destination.getId() == R.id.myChiehkFrament) {
findViewById(R.id.chat_toolbar_constraintL).setVisibility(View.VISIBLE);
toolbar.setNavigationIcon(null);
} else {
findViewById(R.id.chat_toolbar_constraintL).setVisibility(View.GONE);
}
}});
在kotlin
中这样做
navController.addOnDestinationChangedListener { _, destination, _ ->
if (destination.id == R.id.searchFragment) {
binding.toolbar.navigationIcon = null
} else {
}
}
我正在实施与 BottomNavigationView 结合的 NavigationComponent,我注意到工具栏中显示了所有片段目的地的后退箭头,导航图中指定为 startDestination
的片段目的地除外.
我能够找到的此实现的所有示例都显示出类似的行为。在我看来,为 BottomNavigationView 的每个关联片段隐藏后退箭头似乎是一种更自然的设计(点击工具栏中的后退箭头以从选项卡 2 导航到选项卡 1 对我来说感觉很奇怪,我以前从未见过这种情况) .
有关示例以及我希望实现的目标,请参见下图。 有什么方法可以做到这一点?
使用 getActionBar().setDisplayHomeAsUpEnabled(false)
从工具栏中删除 home/back 按钮
如果您使用的是 AppBarConfiguration
应该是这样的。
val appBarConfiguration = AppBarConfiguration(
setOf(
R.id.homeFragment,
R.id.dashboardFragment,
R.id.notificationsFragment
)
)
setupActionBarWithNavController(navController!!, appBarConfiguration!!)
这意味着您的所有片段都是顶级目的地。
注意,当您回击时,您将退出应用程序(或者如果配置到第一个片段,例如在 BottomSheet
s 中您会出现这种行为)。所以如果你需要另一种情况,你应该为每个片段
onBackPressed
删除向后箭头图标的简单方法是设置目标更改侦听器,如果 目的地 ID == R.id.fragmentYouWantRemoveArrawBack setNavigationIcon(null);
EX:
navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() {
@Override
public void onDestinationChanged(@NonNull NavController controller,
@NonNull NavDestination destination,
@Nullable Bundle arguments) {
if (destination.getId() == R.id.myChiehkFrament) {
findViewById(R.id.chat_toolbar_constraintL).setVisibility(View.VISIBLE);
toolbar.setNavigationIcon(null);
} else {
findViewById(R.id.chat_toolbar_constraintL).setVisibility(View.GONE);
}
}});
在kotlin
navController.addOnDestinationChangedListener { _, destination, _ ->
if (destination.id == R.id.searchFragment) {
binding.toolbar.navigationIcon = null
} else {
}
}