personalizar oreo notificaciones navegacion modificar estado color cambiar barra android android-layout material-design appcompat android-toolbar

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



modificar barra notificaciones android (10)

Hay un enfoque simple, fácil y mejor, si necesitamos cambiar solo el color del icono de hamburguesa / espalda.

Es mejor ya que cambia el color solo del ícono deseado, mientras que colorControlNormal y android:textColorSecondary pueden afectar otras vistas de la barra de herramientas.

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

Estoy teniendo problemas con la barra de herramientas v7. Lo que antes era una tarea simple para ActionBar , ahora parece demasiado complejo. Independientemente del estilo que establezca, no puedo cambiar el ícono de navegación (que abre un cajón) o el ícono del menú de desbordamiento (que abre un menú).

Entonces 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" >

Yo digo que se ve así

//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 íconos.

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


Para cambiar el ícono de navegación, puede usar:

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 usar:

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


Para el menú correcto puedes 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 tu 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:


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

En mi caso, el código es:

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


Todas las soluciones anteriores funcionaron para mí en API 21 o superior, pero no en API 19 (KitKat). Hacer un pequeño cambio fue el truco para mí en las versiones anteriores. Observe 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>


agregue su tema predeterminado esta línea;

<item name="colorControlNormal">@color/my_color</item>


qué tema has utilizado en la actividad agrega debajo de un código de línea

para blanco

<style name="AppTheme.NoActionBar"> <item name="android:tint">#ffffff</item> </style> or <style name="AppThemeName" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="android:tint">#ffffff</item> </style>

para negro

<style name="AppTheme.NoActionBar"> <item name="android:tint">#000000</item> </style> or <style name="AppThemeName" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="android:tint">#000000</item> </style>


si desea cambiar los íconos de elementos de menú, ícono de flecha (atrás / arriba) y 3 íconos de puntos, puede usar android:tint

<style name="ToolbarTheme" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> <item name="android:tint">@color/your_color</item> </style>


si desea cambiar sus iconos a un Vector , cree uno nuevo. y luego en tu Activity.java :

Toolbar toolbar = findViewById(R.id.your_toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); toolbar.setNavigationIcon(R.drawable.your_icon); mToolbar.setOverflowIcon(ContextCompat.getDrawable(this, R.drawable.your_icon2));

Para cambiar el color del icono de Vector , vaya a su archivo Vector XML ... en este caso será your_icon.xml , se verá así:

<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24.0" android:viewportHeight="24.0"> <path android:fillColor="@color/Your_Color" android:pathData="M15.41,7.41L14,6l-6,6 6,6 1.41,-1.41L10.83,12z"/>

Tenga en cuenta que usamos estos atributos para establecer el color del Vector:

android:fillColor="@color/Your_Color"

Editar : No puede usar un color de sus colores.XML o en otro lugar, el color debe ser degradado directamente en el archivo XML del Vector ... por lo que se verá así:

android:fillColor="#FFF"


mToolbar.setNavigationIcon(R.mipmap.ic_launcher); mToolbar.setOverflowIcon(ContextCompat.getDrawable(this, R.drawable.ic_menu));