El icono de navegación de la barra de herramientas nunca está

Estoy probando el nuevo componente de la barra de herramientas y tengo algunos problemas con el ícono de navegación. Quiero implementar un icono personalizado para la navegación posterior:

En mi manifiesto, configuré un padre para mi actividad:

    

Declaro la barra de herramientas así:

     

Luego en mi actividad configuro la barra de herramientas de esta manera:

 Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); toolbar.setNavigationIcon(R.drawable.ic_good); toolbar.setTitle("Title"); toolbar.setSubtitle("Sub"); toolbar.setLogo(R.drawable.ic_launcher); setSupportActionBar(toolbar); 

Que me da: Barra de herramientas con botón Atrás

¡El icono de la parte posterior no es el que configuré con setNavigationIcon() ! Cualquier dibujar que le dé al método, el ícono de navegación es siempre la flecha hacia atrás.

Intenté eliminar la asociación padre en el manifiesto, pero el único efecto es (obviamente) evitar que el botón regrese.

Por el contrario, si quiero el icono de flecha atrás predeterminado y no llamo a setNavigationIcon() no tengo ningún icono.

¿Cuál es la forma correcta de manejar el ícono de navegación en la barra de herramientas (personalizado y por defecto)?

NO: estoy ejecutando mi prueba en Android 4.4

Actualmente puedes usarlo, cambiando el orden: (parece ser un error)

 Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); setSupportActionBar(toolbar); toolbar.setNavigationIcon(R.drawable.ic_good); toolbar.setTitle("Title"); toolbar.setSubtitle("Sub"); toolbar.setLogo(R.drawable.ic_launcher); 

Específico para el ícono de navegación, esta es la orden correcta

 // get the actionbar as Toolbar and set it up Toolbar toolbar = (Toolbar) findViewById(R.id.signIn_toolbar); setSupportActionBar(toolbar); 

Informar a la barra de herramientas para proporcionar navegación hacia atrás. Esto establecerá el ícono al ícono de material predeterminado

 getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

Más tarde anula el ícono con el ícono personalizado, en mi caso el ícono de Holo

 toolbar.setNavigationIcon(R.drawable.ic_chevron_left_white_36dp); 

(La respuesta al usuario802421)

 private void setToolbar() { Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); if (toolbar != null) { setSupportActionBar(toolbar); toolbar.setNavigationIcon(R.drawable.ic_action_back); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); } } 

toolbar.xml

  

Acabo de encontrar la solución. Es realmente muy simple:

 mDrawerToggle.setDrawerIndicatorEnabled(false); 

Espero que te ayude.

Use setNavigationIcon para cambiarlo. ¡no olvide crear primero ActionBarDrawerToggle!

código de muestra que funciona para mí:

  Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); drawer = (DrawerLayout)findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.setDrawerListener(toggle); toggle.syncState(); toolbar.setNavigationIcon(R.drawable.ic_menu); 

Tuve un problema similar. Después de un gran dolor de cabeza, encontré que mi ActionBarDrawerToggle estaba modificando el ícono, también cuando no debería modificar el ícono (porque no le di referencias a la barra de herramientas para el componente de alternar). Entonces en mi clase NavigationDrawerFragment (que maneja la apertura y el cierre) en el setUp(...) configuré
mDrawerToggle.setHomeAsUpIndicator(R.drawable.app_icon);
y finalmente funcionó.

Intenté configurar una barra de herramientas como @Gabriele Mariotti, pero tuve algún problema con el título. Entonces, configuré el orden para

 toolbar.setTitle("Title") setSupportActionBar(toolbar); toolbar.setNavigationIcon(R.drawable.ic_good); 

y funciona.

Usé el método a continuación, que realmente es un enigma de todos los anteriores. También encontré que onOptionsItemSelected nunca se activa.

  mDrawerToggle.setDrawerIndicatorEnabled(false); getSupportActionBar().setHomeButtonEnabled(true); Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar); if (toolbar != null) { toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); } 

Puede usar el método invalidate() para cambiar el estado de la barra de herramientas en cualquier lugar. Ejemplo:

 Toolbar toolbar = (Toolbar)findViewById(R.id.my_awesome_toolbar); setSupportActionBar(toolbar); toolbar.setNavigationIcon(R.mipmap.arrow_white); toolbar.invalidate(); // restre toolbar 

Elimine esta línea de la actividad si ha agregado

  @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); // Sync the toggle state after onRestoreInstanceState has occurred. mDrawerToggle.syncState(); } 

Luego establece el ícono

  getSupportActionBar().setHomeAsUpIndicator(icon); 

Prueba esto:

    

trabaja para mi…

  

En caso de que no desee configurar la barra de herramientas como la barra de acciones, puede usar esto:

  val toggle = ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) toggle.isDrawerSlideAnimationEnabled = false toggle.isDrawerIndicatorEnabled = false toggle.setHomeAsUpIndicator(AppCompatResources.getDrawable(this, ...)) drawer!!.addDrawerListener(toggle) toggle.setToolbarNavigationClickListener { setDrawerOpened(!isDrawerOpened()) } toggle.syncState() fun setDrawerOpened(open: Boolean) { if (open == drawerLayout.isDrawerOpen(GravityCompat.START)) return if (open) drawerLayout.openDrawer(GravityCompat.START) else drawerLayout.closeDrawer(GravityCompat.START) }