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:
- BottomNavigationView deshabilita el modo de cambio sin usar la reflexión
- ImageView en CollapsingToolbarLayout no cubre la altura completa?
- Cambiar el color de un elemento de menú marcado en un cajón de navegación
- Bug con FloatingActionButton anclado en la biblioteca de soporte 24.2.1
- ¿Puedo configurar los estilos personalizados globales de aplicaciones para los widgets de Android-support-design?
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 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
- Una sola pestaña en TabLayout no cubre el ancho completo
- La barra de estado se vuelve blanca y no muestra contenido detrás de ella
- No se puede usar srcCompat para ImageViews en android
- Biblioteca de diseño de Android CoordinatorLayout, AppBarLayout y DrawerLayout
- Biblioteca de soporte VectorDrawable Resources $ NotFoundException
- El botón flotante no funciona en la versión Pre-lollipop
- TabLayout establece el espaciado o el margen de cada ficha
- Android ¿Por qué no se muestra el botón de salida de Facebook SDK?
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);
- Limitando el número de filas en una función ContentResolver.query ()
- La relación entre las funciones "onBodyLoad () / onDeviceReady ()" de Phonegap y las funciones "$ (document) .ready ()" de JQuery,