support library last android android-support-library androiddesignsupport

android - library - Flecha hacia atrás e iconos de desbordamiento Color incorrecto en dispositivos Pre-Lollipop después de actualizar a la biblioteca de soporte 23.2.0



com.android.support:support-v4 28 (5)

En dispositivos pre-Lollipop, el ícono del menú de desbordamiento y el botón Atrás en 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:

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:

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 here y here pero no solucioné el problema.

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


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

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


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

En primer lugar, no agregué nada al archivo de gradle. Estoy usando la biblioteca de soporte v23.4.0, ya que es la última en el momento de escribir esta publicación.

Lo que me funcionó 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 color del tinte y la ruta en el fragmento de código anterior. Anteriormente, estaba asignando el color como "@color/someColor" pero mostraba una advertencia de que solo funcionaría 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 solución simple / hack y probablemente no sea una solución correcta.



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

A partir del 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); }


Yo podria arreglar

Descubrí que el tema de AppCompat usa 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: está usando colorControlNormal
  • Segundo: está utilizando vector

COMO ARREGLAR

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

construir.gradle

Añade las siguientes líneas a tu 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" } }

Arreglando tu tema

Este paso puede ser ignorado. Algunos temas base ya establecen colorControlNormal en blanco (como AppCompat.Dark.ActionBar ).

Sin embargo, en mi caso, todos los colores de los botones permanecieron en negro y tuve que agregar colorControlNormal a mi tema y anularlo con el color blanco.

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

Espero que esto pueda ayudarte.

Así fue como solucioné mi problema.