¿Cómo cambiar el color de la flecha hacia atrás en el nuevo tema material?

Actualicé mi SDK a API 21 y ahora el ícono de respaldo / arriba es una flecha negra que apunta hacia la izquierda.

Flecha trasera negra

Me gustaría que sea gris. ¿Cómo puedo hacer eso?

En Play Store, por ejemplo, la flecha es blanca.

He hecho esto para establecer algunos estilos. He usado @drawable/abc_ic_ab_back_mtrl_am_alpha para homeAsUpIndicator . Ese dibujo es transparente (solo alfa) pero la flecha se muestra en negro. Me pregunto si puedo configurar el color como lo hago en DrawerArrowStyle . O si la única solución es crear my @drawable/grey_arrow y usarla para homeAsUpIndicator .

   @style/MyActionBar @style/MyActionBar @style/DrawerArrowStyle @drawable/abc_ic_ab_back_mtrl_am_alpha @drawable/abc_ic_ab_back_mtrl_am_alpha    @color/actionbar_background  @color/actionbar_background    true @color/actionbar_text  

Mi solución hasta ahora ha sido tomar @drawable/abc_ic_ab_back_mtrl_am_alpha , que parece ser blanco, y pintarlo en el color que deseo usando un editor de fotos. Funciona, aunque preferiría usar @color/actionbar_text como en DrawerArrowStyle .

Puedes lograrlo a través del código. Obtenga la flecha hacia atrás dibujable, modifique su color con un filtro y configúrelo como botón Atrás.

 final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha); upArrow.setColorFilter(getResources().getColor(R.color.grey), PorterDuff.Mode.SRC_ATOP); getSupportActionBar().setHomeAsUpIndicator(upArrow); 

Revisión 1:

A partir de API 23 (Marshmallow), el recurso abc_ic_ab_back_mtrl_am_alpha se cambia a abc_ic_ab_back_material .

EDITAR:

Puede usar este código para lograr los resultados que desea:

 toolbar.getNavigationIcon().setColorFilter(getResources().getColor(R.color.blue_gray_15), PorterDuff.Mode.SRC_ATOP); 

En cuanto a la Toolbar y el origen de TintManager , drawable/abc_ic_ab_back_mtrl_am_alpha está tintado con el valor del atributo de estilo colorControlNormal .

@color/my_awesome_color configurar esto en mi proyecto (con @color/my_awesome_color en mi tema), pero sigue siendo negro para mí.

Actualización :

Lo encontré. Necesita establecer el atributo actionBarTheme ( no actionBarStyle ) con colorControlNormal .

P.ej:

    

Trató todas las sugerencias anteriores. La única forma en que pude cambiar el color del ícono de navegación La flecha predeterminada del botón Atrás en mi barra de herramientas es establecer colorControlNormal en un tema base como este. Probablemente debido al hecho de que el padre está usando Theme.AppCompat.Light.NoActionBar

  

Necesita agregar un solo atributo al tema de su barra de herramientas –

  

Aplica esta toolbar_theme a tu barra de herramientas.

O

puedes aplicar directamente a tu tema –

  

Solo agrega

 @color/white 

a su tema de aplicación actual.

Como se dijo en la mayoría de los comentarios anteriores, la solución es agregar

@color/white al tema de su aplicación. Pero confirme que no tiene otro tema definido en su elemento de la barra de herramientas en su diseño.

   

si usa la Toolbar , puede intentar esto

 Drawable drawable = toolbar.getNavigationIcon(); drawable.setColorFilter(ContextCompat.getColor(appCompatActivity, colorId), PorterDuff.Mode.SRC_ATOP); 

La respuesta de Carles es la respuesta correcta, pero pocos de los métodos como getDrawable (), getColor () se desaprobaron en el momento en que escribo esta respuesta . Entonces la respuesta actualizada sería

 Drawable upArrow = ContextCompat.getDrawable(context, R.drawable.abc_ic_ab_back_mtrl_am_alpha); upArrow.setColorFilter(ContextCompat.getColor(context, R.color.white), PorterDuff.Mode.SRC_ATOP); getSupportActionBar().setHomeAsUpIndicator(upArrow); 

Después de algunas otras consultas de stackoverflow encontré que llamar a ContextCompat.getDrawable () es similar a

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { return resources.getDrawable(id, context.getTheme()); } else { return resources.getDrawable(id); } 

Y ContextCompat.getColor () es similar a

 public static final int getColor(Context context, int id) { final int version = Build.VERSION.SDK_INT; if (version >= 23) { return ContextCompatApi23.getColor(context, id); } else { return context.getResources().getColor(id); } } 

Enlace 1: ContextCompat.getDrawable ()

Enlace 2: ContextCompat.getColor ()

En compileSdkVersoin 25, puede hacer esto:

styles.xml

  

enter image description here

Cambiar el color del icono de navegación del menú

Icono de menú de conversión final Color

En style.xml:

   In Mainfests.xml :  

Encontré una solución que funciona antes de Lollipop. Establezca el “colorControlNormal” dentro del “actionBarWidgetTheme” para cambiar el color homeAsUpIndicator. Modificando la respuesta de rockgecko de arriba para que se vea así:

   

Use el siguiente método:

 private Drawable getColoredArrow() { Drawable arrowDrawable = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha); Drawable wrapped = DrawableCompat.wrap(arrowDrawable); if (arrowDrawable != null && wrapped != null) { // This should avoid tinting all the arrows arrowDrawable.mutate(); DrawableCompat.setTint(wrapped, Color.GRAY); } return wrapped; } 

Ahora puede configurar el dibujable con:

 getSupportActionBar().setHomeAsUpIndicator(getColoredArrow()); 

Otra solución que podría funcionar para usted es no declarar su barra de herramientas como la barra de acción de la aplicación (por setActionBar o setSupportActionBar ) y establecer el ícono reverso en su onActivityCreated usando el código mencionado en otra respuesta en esta página

 final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha); upArrow.setColorFilter(getResources().getColor(R.color.grey), PorterDuff.Mode.SRC_ATOP); toolbar.setNavigationIcon(upArrow); 

Ahora, no recibirá la onOptionItemSelected llamada onOptionItemSelected cuando presione el botón Atrás. Sin embargo, puede registrarse para eso usando setNavigationOnClickListener . Esto es lo que hago:

 toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getActivity().onBackPressed(); //or whatever you used to do on your onOptionItemSelected's android.R.id.home callback } }); 

No estoy seguro de si funcionará si trabaja con elementos del menú.

Nos encontrábamos con el mismo problema y todo lo que queríamos era establecer el

aplicación: collapseIcon

atributo en la barra de herramientas al final, que no encontramos porque no está muy bien documentado 🙂

  

prueba esto

 public void enableActionBarHomeButton(AppCompatActivity appCompatActivity, int colorId){ final Drawable upArrow = ContextCompat.getDrawable(appCompatActivity, R.drawable.abc_ic_ab_back_material); upArrow.setColorFilter(ContextCompat.getColor(appCompatActivity, colorId), PorterDuff.Mode.SRC_ATOP); android.support.v7.app.ActionBar mActionBar = appCompatActivity.getSupportActionBar(); mActionBar.setHomeAsUpIndicator(upArrow); mActionBar.setHomeButtonEnabled(true); mActionBar.setDisplayHomeAsUpEnabled(true); } 

Llamada de función:

 enableActionBarHomeButton(this, R.color.white); 

Puede cambiar el color del ícono de navegación programáticamente de esta manera:

 mToolbar.setNavigationIcon(getColoredArrow()); private Drawable getColoredArrow() { Drawable arrowDrawable = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha); Drawable wrapped = DrawableCompat.wrap(arrowDrawable); if (arrowDrawable != null && wrapped != null) { // This should avoid tinting all the arrows arrowDrawable.mutate(); DrawableCompat.setTintList(wrapped, ColorStateList.valueOf(this.getResources().getColor(R.color.your_color))); } } return wrapped; } 

Simplemente elimine android:homeAsUpIndicator y homeAsUpIndicator de su tema y estará bien. El atributo de color en su estilo DrawerArrowStyle debe ser suficiente.

Si desea cambiar el color del botón de flecha para todos los íconos en su tema, solo anule el archivo predeterminado en su carpeta dibujable. El nombre de archivo predeterminado es “abc_ic_ab_back_mtrl_am_alpha.png”.

Acabo de cambiar el tema de la barra de herramientas para que sea @ style / ThemeOverlay.AppCompat.Light

y la flecha se volvió gris oscuro

   

A menos que haya una mejor solución …

Lo que hice fue tomar las imágenes @drawable/abc_ic_ab_back_mtrl_am_alpha , que parecen ser blancas, y pintarlas en el color que deseo usando un editor de fotos.