将导航抽屉与导航组件一起使用时如何更改操作栏图标(汉堡包图标)
how to change Action bar icon (hamburger icon) when using navigation drawer with navigation component
我想更改主页向上指示器,但在使用导航组件时它不起作用
我尝试了这里的解决方案,但没有用
我的代码
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)
}
}
如果您只想显示后退箭头按钮而不是汉堡按钮,您可以从 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();
我不知道,为什么?但对我来说,它适用于 postDelay 函数。即使我设置 delay 等于 zero
navController.addOnDestinationChangedListener { controller, destination, arguments ->
if (destination.id == R.id.fragment_orders) {
view.postDelayed(
{
supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_amount)
},
0
)
}
}
添加一个延迟为 post 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());
}
我想更改主页向上指示器,但在使用导航组件时它不起作用
我尝试了这里的解决方案,但没有用
我的代码
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)
}
}
如果您只想显示后退箭头按钮而不是汉堡按钮,您可以从 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();
我不知道,为什么?但对我来说,它适用于 postDelay 函数。即使我设置 delay 等于 zero
navController.addOnDestinationChangedListener { controller, destination, arguments ->
if (destination.id == R.id.fragment_orders) {
view.postDelayed(
{
supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_amount)
},
0
)
}
}
添加一个延迟为 post 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());
}