Cambiar el color del icono de desbordamiento de la barra de herramientas

Tengo una barra de herramientas android.support.v7.widget en mi aplicación para Android. El color de fondo de esto es naranja brillante y el mejor aspecto del color encima de esto sería blanco en vez de negro.

Tengo el color del defecto en negro y no blanco. Puesto que entraría en conflicto con otras cosas, eso es casi imposible de anular. ¡No puedo cambiar el color de texto principal a blanco!

He logrado cambiar el color del título. Lo que estoy buscando ahora es cómo puedo cambiar el color del botón de acción también (a blanco).

Introduzca aquí la descripción de la imagen

Gracias

Editar: Incluyendo el código ahora

Actividad principal:

 <?xml version="1.0" encoding="utf-8"?> <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" xmlns:app="http://schemas.android.com/apk/res-auto" tools:context=".UI.activities.MainActivity"> <android.support.v7.widget.Toolbar android:id="@+id/r2_toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:elevation="4dp" app:titleTextColor="@color/primary_text_material_light" app:subtitleTextColor="@color/primary_text_material_light" android:theme="@style/R2Theme.Toolbar"/> <fragment android:name="com.r2retail.r2retailapp.UI.fragments.SetupFragment" android:layout_below="@+id/r2_toolbar" android:id="@+id/list" android:layout_weight="1" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout> 

Barra de menús:

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/about" android:icon="@drawable/ic_menu" android:title="About" app:showAsAction="never"/> </menu> 

Estilos:

 <resources> <style name="R2Theme" parent="Theme.AppCompat.Light.NoActionBar">= <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorPrimary</item> <item name="android:textColorPrimary">@color/secondary_text_material_dark</item> <item name="android:textColorSecondaryInverse">@color/primary_text_material_light</item> </style> <style name="R2Theme.Toolbar" parent="R2Theme"> <item name="actionMenuTextColor">@color/primary_text_material_light</item> </style> </resources> 

En estilos:

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> ... <item name="actionOverflowButtonStyle">@style/MyOverflowButtonStyle</item> </style> <style name="MyOverflowButtonStyle" parent="Widget.AppCompat.ActionButton.Overflow"> <item name="android:tint">#62ff00</item> </style> 

Resultado:

Introduzca aquí la descripción de la imagen

La solución es reemplazar el icono en sí.

1er

Ir a valuse / estilos y en su archivo styles.xml añadir:

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="android:actionOverflowButtonStyle">@style/MyActionButtonOverflow</item> </style> <style name="MyActionButtonOverflow" parent="android:style/Widget.Holo.Light.ActionButton.Overflow"> <!--Here you need to put name of drawable you will create during the next step--> <item name="android:src">@drawable/your_white_icon</item> </style> 

2do

A continuación, vaya a la carpeta dibujable . Clic derecho del ratón -> nuevo -> activo vectorial. A continuación, pulse sobre Icono de la imagen y elija de icono sugerido llamado ic_more_vert_black_24dp .

Personalizarlo -> pulsar siguiente -> acabado.

A continuación, abra el archivo de icono recién creado. El código se parece a esto.

 <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="#FFFFFFFF" <!-- Here u can change color--> android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z"/> </vector> 

Cambie el atributo fillColor al color que necesita. Ponga este archivo en los estilos como se describe en el primer paso.

Voila! El color de nuestros tres puntos cambió, no dependiendo de los estilos de aplicación base (resultado para el color # FF2012).

Introduzca aquí la descripción de la imagen

Una forma alternativa, en código en lugar de XML:

 public static boolean colorizeToolbarOverflowButton(@NonNull Toolbar toolbar, @ColorInt int color) { final Drawable overflowIcon = toolbar.getOverflowIcon(); if (overflowIcon == null) return false; toolbar.setOverflowIcon(getTintedDrawable(toolbar.getContext(), overflowIcon, toolbarIconsColor)); return true; } public static Drawable getTintedDrawable(@NonNull Context context, @NonNull Drawable inputDrawable, @ColorInt int color) { Drawable wrapDrawable = DrawableCompat.wrap(inputDrawable); DrawableCompat.setTint(wrapDrawable, color); DrawableCompat.setTintMode(wrapDrawable, Mode.SRC_IN); return wrapDrawable; } 

La función devolverá true si tiene éxito para colorear el icono de desbordamiento.

Y otra alternativa, en caso de que prefiera no utilizar un tintado dibujable:

 public static boolean colorizeToolbarOverflowButton(@NonNull Toolbar toolbar, @ColorInt Integer color) { final Drawable overflowIcon = toolbar.getOverflowIcon(); if (overflowIcon == null) return false; final PorterDuffColorFilter colorFilter = toolbarIconsColor == null ? null : new PorterDuffColorFilter(toolbarIconsColor, PorterDuff.Mode.MULTIPLY); overflowIcon.setColorFilter(colorFilter); return true; } 
  • ¿Hay una manera de decodificar un archivo .ICO a una resolución mayor que 16x16?
  • Android, ¿Cómo usar el método readTypedList correctamente en una clase Parcelable?
  • Cómo gestionar varias tareas asíncronas de forma eficiente en Android
  • Android: reconstruir ahora requiere nivel de cumplimiento del compilador 5.0 o 6.0. Se encontró '1.7' en su lugar. ¿Por qué eliminar de @Override?
  • Las etiquetas NFC pueden ser leídas por lector RFID?
  • Android: liberación de la memoria asignada AnimationDrawable está utilizando hasta
  • Android y Lambda
  • Android guarda la imagen de la cámara en el almacenamiento local
  • Error de java.lang.outofmemory (servicios web) en android
  • OnSaveInstanceState no está siendo llamado en Fragment
  • Eventos personalizados en React Native Componente nativo de la interfaz de usuario de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.