Estoy tratando de la nueva Barra de herramientas de componentes y teniendo algunos problemas con el icono de navegación.
Quiero implementar un icono personalizado para el regreso de navegación :

En mi manifiesto puedo establecer un padre para mi actividad :

<activity android:name=".CardsActivity" android:parentActivityName=".MainActivity">
    <!-- Parent activity meta-data to support API level 7+ -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainActivity" />
</activity>

Declaro la barra de herramientas como esta :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.example.lollitest.MainActivity" >

    <android.support.v7.widget.Toolbar
        android:id="@+id/my_awesome_toolbar"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:minHeight="?attr/actionBarSize"
        android:layout_marginBottom="10dp"
        android:background="?attr/colorPrimary" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/my_awesome_toolbar"
        android:text="@string/hello_world" />

</RelativeLayout>

A continuación, en mi actividad me configurar la Barra de herramientas como esta :

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 de navegación icono nunca conjunto

El icono de nuevo no es de la que me he fijado con setNavigationIcon() ! Lo dibujable doy al método el icono de navegación es siempre la flecha hacia atrás.

He probado a quitar la asociación de padres de familia en el manifiesto, pero el único efecto es (obviamente) para prevenir el botón para ir hacia atrás.

Por contra si desea que la copia de icono de la flecha y no llamar setNavigationIcon() yo no tengo ningún icono en absoluto.

¿Cuál es la forma correcta de manejar el icono de navegación en la barra de herramientas (a la medida y el valor predeterminado) ?

Nota : estoy ejecutando mi prueba en Android 4.4

  • he hecho esto muchas veces y de alguna manera no su trabajo para mí ahora?
InformationsquelleAutor grunk | 2014-10-23

13 Comentarios

  1. 113

    Actualmente se pueden utilizar, cambiar el orden: (lo que 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);
    • De hecho ese trabajo por un icono personalizado ! Y lo que si desea que el icono por defecto , no hay un equivalente a sethomebuttonenabled(verdadero) , que es ?
    • getSupportedActionBar().setHomeButtonEnabled(true);
    • sólo la corrección! getSupportActionBar().setHomeButtonEnabled(true);
    • Esto no parece funcionar para mí. Hay alguna específica pedido de error para la configuración del botón de inicio así?
    • No importa, he encontrado una manera alrededor. Usted tiene que agregar getSupportActionBar().setDisplayHomeAsUpEnabled(true); DESPUÉS de setSupportActionBar a la barra de herramientas. Similar a la configuración de el icono de navegación.
    • Ya lo tienes! Yeah!
    • muchas muchas gracias!
    • En mi caso getSupportActionBar().setDisplayHomeAsUpEnabled(true) cambiar el icono de navegación de flecha negra. Resuelto este problema mediante el establecimiento de toolbar.setNavigationOnClickListener con onBackPressed().
    • podrías compartir el fragmento de código donde se fija el ícono de la flecha atrás?
    • respondió usted a continuación. La buena suerte.
    • Si usted está usando ActionBarDrawerToggle, mueva el de la barra de herramientas.setNavigationIcon debajo de activar.syncState()

  2. 23

    Específicos para el icono de navegación, este es el orden correcto

    //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 la navegación. De esta forma se establecerá el icono para el material por defecto el icono de

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    Más tarde reemplazar el icono con la costumbre, en mi caso el Holo icono de nuevo

    toolbar.setNavigationIcon(R.drawable.ic_chevron_left_white_36dp);
  3. 20

    (La respuesta a user802421)

    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

    <android.support.v7.widget.Toolbar
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="@dimen/toolbar_height"
        android:background="?attr/colorPrimaryDark" />
  4. 4

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

    mDrawerToggle.setDrawerIndicatorEnabled(false);

    Espero que te ayude.

    • por favor, decir, cómo obtener la mDrawerToggle objeto!
    • android.apoyo.v7.widget.Barra de herramientas no tiene un método setDrawerIndicatorEnabled
    • Se supone que para crear usted mismo. Ejemplo: ActionBarDrawerToggle(activity, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
  5. 4

    Uso setNavigationIcon para cambiarlo. no olvides crear ActionBarDrawerToggle primero!

    código de ejemplo 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);
    • Esto funcionó para mí – ¡por fin! Este trabajo de cambiar el estándar burgermenu icono era el MODO de disco duro. No puedo entender por qué esto funcionó después de todo lo demás fue creado y, a continuación, asignar el icono – ¿alguien sabe?
  6. 3

    Tuve problema similar. Después de un gran dolor de cabeza que he encontrado, que mi ActionBarDrawerToggle fue modificar el icono, también cuando no debería modificar el icono (porque no me dan referencia de la barra de herramientas a la alternancia del componente). Así que en mi NavigationDrawerFragment de la clase (que se encarga de la apertura y de cierre) en setUp(...) método que establece
    mDrawerToggle.setHomeAsUpIndicator(R.drawable.app_icon);

    y finalmente funcionó.

  7. 3

    Traté de configurar la barra de herramientas como @Gabriele Mariotti, pero he tenido algún problema con el título. Así que me puse el fin de

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

    y funciona.

  8. 3

    He utilizado el método por debajo de lo que realmente es un enigma de todos los de arriba. También me pareció que onOptionsItemSelected nunca está activado.

        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();
                }
            });
        }
  9. 3

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

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

    Quitar esta línea de actividad si ha añadido

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

    A continuación, establezca el icono de

     getSupportActionBar().setHomeAsUpIndicator(icon);
  11. 0

    Intente esto:

      <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:toolbar="http://schemas.android.com/apk/res-auto"
            android:id="@+id/tool_drawer"
            android:layout_width="match_parent"
            android:layout_height="?actionBarSize"
            toolbar:navigationIcon="@drawable/ic_navigation">
    
        </android.support.v7.widget.Toolbar>
  12. 0

    trabajo para mí…

    <android.support.v7.widget.Toolbar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/toolBar"
            android:background="@color/colorGreen"
            app:title="Title"
            app:titleTextColor="@color/colorBlack"
            app:navigationIcon="@drawable/ic_action_back"/>
  13. 0

    En caso de que usted no desea configurar de la barra de herramientas la barra de acción, puede utilizar este:

            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)
    }

Dejar respuesta

Please enter your comment!
Please enter your name here