如何在使用带导航组件的导航抽屉时更改操作栏图标(汉堡包图标)



我想更改home-up指示器,但使用导航组件时它不起作用

我从这里尝试了解决方案,但没有成功如何更改工具栏图标(汉堡包图标(当使用导航抽屉与喷气背包导航组件

我的代码

setSupportActionBar(binding.toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(R.id.myTeamFragment,
R.id.myTasksFragment, R.id.meetingsFragment, R.id.freeTimeFragment, R.id.dashboardFilterFragment)
.setOpenableLayout(binding.getRoot())
.build();
NavigationUI.setupWithNavController(binding.toolbar, getNavController(), appBarConfiguration);

然后作为解决方案提到

ActionBar actionBar = getSupportActionBar();
getNavController().addOnDestinationChangedListener((controller, destination, arguments) -> {
if (destination.getId() == R.id.dest0
|| destination.getId() == R.id.dest1
|| destination.getId() == R.id.dest2
|| destination.getId() == R.id.dest3
|| destination.getId() == R.id.dest4){
actionBar.setHomeAsUpIndicator(R.drawable.ic_hambergur_menu);
} else {
actionBar.setHomeAsUpIndicator(R.drawable.ic_hambergure_back);
}
});

您使用的是带有Toolbar的设置

NavigationUI.setupWithNavController(binding.toolbar, getNavController(), appBarConfiguration);

然后使用Toolbar API而不是ActionBar API:

navController.addOnDestinationChangedListener { controller, destination, arguments ->
if (destination.id == R.id.nav_home){
toolbar.setNavigationIcon(R.drawable.xxxx)
}
}

我不知道,为什么?但对我来说,它适用于postDelay函数。即使我设置延迟等于

navController.addOnDestinationChangedListener { controller, destination, arguments ->
if (destination.id == R.id.fragment_orders) {
view.postDelayed(
{
supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_amount)
},
0
)
}
}

添加一个延迟为0毫秒的处理程序对我很有效。

@Override
public void onDestinationChanged(@NonNull NavController controller,
@NonNull NavDestination destination,
@Nullable Bundle arguments) {
Log.d(TAG, "onDestinationChanged: current destination: "+navController.getCurrentDestination().getLabel());
this.currentFragmentId = destination.getId();
if(currentFragmentId == R.id.addItemFragment){
new Handler().postDelayed(()->{
mToolbar.setNavigationIcon(R.drawable.ic_baseline_arrow_back_ios_24);
},0);
}
super.setTitle(destination.getLabel());
}

如果你只想显示后退箭头按钮而不是汉堡按钮,你可以从appBarConfiguration中删除你想显示后退按钮的片段

在您的代码片段中,后退按钮不会显示在这些片段(R.id.myTasksFragment, R.id.meetingsFragment, R.id.freeTimeFragment, R.id.dashboardFilterFragment(中,请删除其中的任何片段以显示后退按钮。

AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(R.id.myTeamFragment,
R.id.myTasksFragment, R.id.meetingsFragment, R.id.freeTimeFragment, R.id.dashboardFilterFragment)
.setOpenableLayout(binding.getRoot())
.build();

相关内容

  • 没有找到相关文章

最新更新