Cómo cambiar los iconos de los iconos del menú de navegación y desbordamiento de la barra de herramientas (appcompat v7)?

Estoy teniendo un rato duro con la barra de herramientas v7. Lo que una vez fue una tarea sencilla para ActionBar , ahora parece demasiado complejo. No importa el estilo que establezco, no puedo cambiar ni el icono de navegación (que abre un cajón) ni el icono del menú de desbordamiento (que abre un menú).

Así que tengo una Toolbar

 <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/ghex" android:minHeight="?attr/actionBarSize" app:theme="@style/ThemeOverlay.AppCompat.Light" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" > 

I código que se ve como este

 //before in the code I do mToolbar = (Toolbar) findViewById(R.id.toolbar); private void initToolbar() { setSupportActionBar(mToolbar); getSupportActionBar().setDisplayShowTitleEnabled(false); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); } 

Ahora, necesito cambiar el Drawable para esos dos iconos.

¿Cómo hago esto para la Toolbar compat v7? Supongo que tendría que cambiar la flecha visible cuando el cajón está abierto (Android 5.0).

Para cambiar el icono de navegación puede utilizar:

 Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); setSupportActionBar(toolbar); toolbar.setNavigationIcon(R.drawable.my_icon); 

Para cambiar el icono de desbordamiento, puede definir un estilo como este:

 <style name="AppTheme.Base" parent="Theme.AppCompat.Light"> <item name="actionOverflowButtonStyle">@style/OverFlow</item> </style> <style name="OverFlow" parent="Widget.AppCompat.ActionButton.Overflow"> <item name="android:src">@drawable/my_overflow_menu</item> </style> 

En cualquier caso, podría no ser una buena idea cambiar un icono estándar, como el menú de desbordamiento.

Si desea cambiar el color del icono puede utilizar:

 <android.support.v7.widget.Toolbar app:theme="@style/ThemeToolbar" /> <style name="ThemeToolbar" parent="Theme.AppCompat.Light"> <!-- navigation icon color --> <item name="colorControlNormal">@color/my_color</item> <!-- color of the menu overflow icon --> <item name="android:textColorSecondary">@color/my_color</item> </style> 
  mToolbar.setNavigationIcon(R.mipmap.ic_launcher); mToolbar.setOverflowIcon(getResources().getDrawable(R.mipmap.ic_menu)); 

Todas las soluciones anteriores trabajaron para mí en API 21 o superior, pero no en API 19 (KitKat). Hacer un pequeño cambio hizo el truco para mí en las versiones anteriores. Aviso Widget.Holo lugar de Widget.AppCompat

 <style name="OverFlowStyle" parent="@android:style/Widget.Holo.ActionButton.Overflow"> <item name="android:src">@drawable/ic_overflow</item> </style> 

Hay un acercamiento simple, fácil y mejor, si necesitamos cambiar solamente el color del icono de la hamburguesa / de la parte posterior.

Es mejor, ya que cambia el color sólo del icono deseado, mientras que colorControlNormal y android:textColorSecondary podría afectar a otros niños de la barra de herramientas también.

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="drawerArrowStyle">@style/DrawerArrowStyle</item> </style> <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> <item name="spinBars">true</item> <item name="color">@android:color/white</item> </style> 

Para el menú de la derecha puede hacerlo:

 public static Drawable setTintDrawable(Drawable drawable, @ColorInt int color) { drawable.clearColorFilter(); drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN); drawable.invalidateSelf(); Drawable wrapDrawable = DrawableCompat.wrap(drawable).mutate(); DrawableCompat.setTint(wrapDrawable, color); return wrapDrawable; } 

Y en su actividad

 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_profile, menu); Drawable send = menu.findItem(R.id.send); Drawable msg = menu.findItem(R.id.message); DrawableUtils.setTintDrawable(send.getIcon(), Color.WHITE); DrawableUtils.setTintDrawable(msg.getIcon(), Color.WHITE); return true; } 

Este es el resultado:

Introduzca aquí la descripción de la imagen

Para mostrar el icono, use getSupportActionBar().setIcon(R.xxx.xxx)

En mi caso el código es: –

getSupportActionBar().setIcon (R.mipmap.ic_launcher);

  • Cómo cambiar el tamaño del icono de elemento de menú en NavigationView?
  • Uso de varios DotSpan en MaterialCalendarView
  • ¿Cómo implementar el diseño del material con la disposición de restricciones?
  • Agregar FloatingActionButton en el diseño de barra de herramientas de contracción
  • ImageView está cubriendo el efecto de rizado del botón de superposición
  • Circular revela transición para una nueva actividad
  • Uso de Theme.Material.Light.DarkActionBar con Theme.AppCompat.Light.DarkActionBar bloquea la aplicación en android L (api v21)
  • Elevación del Lollipop en contorno cóncavo
  • La barra de progreso de círculo indeterminado en android es blanca, a pesar de colorAccent color
  • NullPointerException-: Intenta invocar el método de interfaz "android.view.View android.view.MenuItem.getActionView () 'en una referencia de objeto nulo
  • ¿Cuáles son las maneras de generar programáticamente conjuntos de colores de Material Design?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.