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