Iconos de flecha de retroceso y desbordamiento de color incorrecto en dispositivos pre-Lollipop después de actualizar a la biblioteca de soporte 23.2.0

En los dispositivos pre-Lollipop, el icono de menú de desbordamiento y el botón Atrás de la barra de acción cambiaron a color negro después de actualizar a la biblioteca de soporte 23.2.0. Son blancos (que es el color correcto) antes de la actualización.

El color correcto es: Introduzca aquí la descripción de la imagen

El color incorrecto aparece para los dispositivos pre-Lollipop después de la actualización, como se muestra con el icono del menú de desbordamiento:

Introduzca aquí la descripción de la imagen

El tema en sytle.xml (pre-v21 / Lollipop):

<resources xmlns:android="http://schemas.android.com/apk/res/android" > <!--Used on the application level by the manifest.--> <style name="app_theme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimary">@color/app_primary_colour</item> <item name="colorPrimaryDark">@color/app_primary_dark_colour</item> <item name="colorAccent">@color/app_accent_colour</item> <item name="android:windowBackground">@color/app_background</item> <item name="searchViewStyle">@style/custom_search_view_style</item> </style> <!--Used by activities.--> <style name="app_theme.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style> <!--TODO: What are these?--> <style name="app_theme.app_bar_overlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /> <style name="app_theme.popup_overlay" parent="ThemeOverlay.AppCompat.Light" /> ... ... </resources> 

He mirado aquí y aquí, pero no arreglar el problema.

ACTUALIZACIÓN: consulte también este informe de errores de Google: https://code.google.com/p/android/issues/detail?id=201918

Podría arreglarlo.

Descubrí que el tema AppCompat utiliza el siguiente recurso para el botón de desbordamiento: abc_ic_menu_overflow_material.xml

El contenido de este recurso es:

 <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24.0" android:viewportHeight="24.0" android:tint="?attr/colorControlNormal"> ... </vector> 

Entonces, conecté los puntos:

  • Primero: Utiliza colorControlNormal
  • Segundo: Está utilizando el vector

COMO ARREGLAR

De acuerdo con las notas de la versión de la Biblioteca V23.2.0 ( LINK AQUÍ ), tenemos que actualizar build.gradle para agregar soporte a Vector:

Construir un gradiente

Añada las siguientes líneas a su gradle de construcción

Gradle 2.0 (no he probado):

 android { defaultConfig { vectorDrawables.useSupportLibrary = true } } 

Gradle 1.5 (estoy usando esto .. funciona):

 android { defaultConfig { generatedDensities = [] } aaptOptions { additionalParameters "--no-version-vectors" } } 

Cómo arreglar el tema

Este paso puede ser ignorado. Algunos temas básicos ya establecen colorControlNormal a blanco (como AppCompat.Dark.ActionBar ).

Sin embargo, en mi caso, todos los colores del botón se mantuvo negro y tuve que añadir el colorControlNormal a mi tema y anularlo con color blanco.

 <style name="AppTheme" parent="Theme.AppCompat.NoActionBar"> <item name="colorControlNormal">@color/white</item> </styel> 

Espero que esto pueda ayudarte.

Así fue como arreglé mi problema.

Simplemente actualice la biblioteca de soporte 23.2.1, que corrige el problema.

Para los usuarios de AppCompat , los indicadores para habilitar los elementos desplegables del vector de soporte descritos en la publicación 23.2 ( http://goo.gl/073Mpo ) ya no son necesarios para el uso de AppCompat.

https://plus.google.com/+AndroidDevelopers/posts/BZgzpAqkd8G

Tuve este problema al cambiar la biblioteca de soporte a 23.2.0. La flecha hacia atrás y los iconos de desbordamiento se volvieron negros.

 protected void changeBackArrow() { final Drawable upArrow = ContextCompat.getDrawable(this, R.drawable.abc_ic_ab_back_material); upArrow.setColorFilter(ContextCompat.getColor(this, R.color.textColorPrimary), PorterDuff.Mode.SRC_ATOP); getSupportActionBar().setHomeAsUpIndicator(upArrow); } 

Como soporte 23.1 La barra de herramientas ahora tiene los métodos getOverflowIcon () y setOverflowIcon ()

 protected void changeOverflowMenu() { final Drawable overflowIcon = getToolbar().getOverflowIcon(); overflowIcon.setColorFilter(ContextCompat.getColor(this, R.color.colorWhite), PorterDuff.Mode.SRC_ATOP); getToolbar().setOverflowIcon(overflowIcon); } 

Estoy escribiendo esta respuesta, porque la respuesta aceptada no funcionó para mí (aunque sea correcta). Pero lo solucioné de otra manera, así que lo comparto aquí:

En primer lugar, no agregué nada al archivo gradle. Estoy utilizando la Biblioteca de Soporte v23.4.0, ya que es la más reciente en el momento de escribir esta publicación.

Lo que funcionó para mí es codificar el color del tinte o el color de la ruta, en lugar de usar una referencia de recursos de color . Por ejemplo, use android:fillColor="#fff" lugar de android:fillColor="@android:color/white" :

 <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:tint="#fff" android:viewportHeight="24" android:viewportWidth="24"> <path android:fillColor="#fff" android:pathData="M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z" /> </vector> 

Observe el tinte y el color de la ruta en el fragmento de código anterior. Anteriormente estaba asignando el color como "@color/someColor" pero estaba mostrando una advertencia de que funcionará sólo para v21 y superior, y en realidad no funcionaba por debajo de v21. Así que cambié eso a un valor codificado. Una vez más es una simple solución / hack y probablemente no es una solución correcta.

Escribí una función auxiliar (que utilizo una clase auxiliar estática con funciones útiles), que se puede llamar al inicio de la onCreate () de una actividad:

  public static void setWhiteBackArrow(ActionBar actionbar, Context context){ //needed due to bug in Android compile version 23 // https://code.google.com/p/android/issues/detail?id=201918 if (actionbar != null) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { final Drawable upArrow = ContextCompat.getDrawable(context, android.support.v7.appcompat.R.drawable.abc_ic_ab_back_material); upArrow.setColorFilter(ContextCompat.getColor(context, R.color.white), PorterDuff.Mode.SRC_ATOP); //ActionBar aBar = context.getSupportActionBar(); actionbar.setHomeAsUpIndicator(upArrow); } } 

Llámelo así en el onCreate () de la actividad:

 Helper.setWhiteBackArrow(getSupportActionBar(), this); 
  • Color del texto del botón AlertDialog con la biblioteca de soporte v24.2.1
  • TabLayout (Android Design Library) Color del texto
  • Comportamiento personalizado con el diseño del coordinador
  • Tabla de soporte de diseño de Android Contenido solapado de superposición
  • Android: ¿Cómo trabajar con CoordinatorLayout y barra de navegación translúcida?
  • EditText getHint () devuelve null al usar la biblioteca de soporte de diseño
  • Botón de acción flotante que no se muestra completamente dentro de un fragmento
  • Cómo atenuar el fondo cuando se utiliza la parte inferior de la biblioteca de soporte?
  • Obtención de la excepción Nullpointer después de actualizar a la compatibilidad con el diseño de Android 22.2.1
  • Cómo obtener la posición del elemento seleccionado actual usando TabLayout en Android Design Library
  • El margen predeterminado de FloatingActionButton no funciona en lollipop
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.