I would like to change up button icon in ActionBar that is working with Navigation Component. I've tried several options like:
supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_arrow_left_blue_24dp)
in MainAcitivty
or
app:navigationIcon="@drawable/ic_arrow_left_blue_24dp"
in Toolbar
.xml file and nothing seems to work.
I have a pretty standard setup with
setSupportActionBar(appToolbar.toolbar)
setupActionBarWithNavController(this, navController)
called in MainActivity:onCreate
method.
I would expect that
supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_arrow_left_blue_24dp)
would work, because for example disabling title for ActionBar
by calling:
supportActionBar?.setDisplayShowTitleEnabled(false)
works as expected and title is not set to Fragment
name while navigating.
What's more, I investigated a little bit and in ActionBarOnDestinationChangedListener
there is a call to setNavigationIcon
which is setting an icon to DrawerArrowDrawable
, which is a little bit weird since I'm not using Drawer
in my setup.
Also changing to:
setupWithNavController(toolbar, navController)
is not working because ToolbarOnDestinationChangedListener
also using the same DrawerArrowDrawable
.
I have found answer. I checked issue tracker for navigation component and it seems like for now it's impossible to change it without a workaround:
https://issuetracker.google.com/u/1/issues/121078028
Gladly it's still possible, we just need to implement OnDestinationChangedListener
and change icon there as it's called after setNavigationIcon
in AbstractAppBarOnDestinationChangedListener
. Here is a code:
navController.addOnDestinationChangedListener { _, _, _ ->
supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_arrow_left_blue_24dp)
}
You can even differ icon for different destinations.
It's temporary solution as this feature is not there yet. I'm using 1.0.0-alpha09
version of the navigation component.
If you do not use a supportActionBar
but use your own toolbar intead, the solution is as follows.
navController.addOnDestinationChangedListener { _, destination, _ ->
if (destination.id == R.id.myDestination) {
myToolbar.setNavigationIcon(R.drawable.myIcon)
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With