Sur les appareils antérieurs à Lollipop, l’icône du menu de dépassement et le bouton précédent de la barre d’action sont passés à la couleur noire après la mise à niveau vers Support Library 23.2.0. Ils sont blancs (qui est la bonne couleur) avant la mise à niveau.
La couleur incorrecte apparaît pour les périphériques pré-Lollipop après la mise à niveau, comme indiqué par l'icône de menu de débordement:
Le thème dans sytle.xml (pré-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>
J'ai regardé ici et ici mais je n'ai pas résolu le problème.
UPDATE: Voir également ce rapport de bogue Google: https://code.google.com/p/Android/issues/detail?id=201918
Je pourrais réparer.
J'ai trouvé que le thème AppCompat utilise la ressource suivante pour le bouton de débordement: abc_ic_menu_overflow_material.xml
Le contenu de cette ressource est:
<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>
Ensuite, j'ai connecté les points:
COMMENT RÉPARER
Selon les notes de publication de Library V23.2.0 ( LINK HERE ), nous devons mettre à jour build.gradle pour ajouter la prise en charge à Vector:
build.gradle
Ajouter les lignes suivantes à votre niveau de construction
Gradle 2.0 (je n'ai pas testé):
Android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
Gradle 1.5 (je l'utilise .. ça marche):
Android {
defaultConfig {
generatedDensities = []
}
aaptOptions {
additionalParameters "--no-version-vectors"
}
}
Correction de votre thème
Cette étape peut être ignorée. Certains thèmes de base ont déjà défini colorControlNormal
en blanc (tel que AppCompat.Dark.ActionBar
).
Cependant, dans mon cas, toutes les couleurs des boutons restaient noires et je devais ajouter la variable colorControlNormal
à mon thème et le remplacer par une couleur blanche.
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<item name="colorControlNormal">@color/white</item>
</styel>
J'espère que cela pourra vous aider.
C'est ainsi que j'ai résolu mon problème.
Il suffit de mettre à jour la bibliothèque de support 23.2.1, qui résout le problème.
Pour les utilisateurs d'AppCompat, les indicateurs d'activation des dessins de vecteur de support décrits dans l'article de blog 23.2 ( http://goo.gl/073Mpo ) ne sont plus nécessaires pour utiliser AppCompat.
https://plus.google.com/+AndroidDevelopers/posts/BZgzpAqkd8G
J'ai eu ce problème en changeant la bibliothèque de support à 23.2.0. Les icônes flèche arrière et débordement sont devenues noires.
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);
}
Depuis le support 23.1 Toolbar a maintenant les méthodes getOverflowIcon () et setOverflowIcon ()
protected void changeOverflowMenu() {
final Drawable overflowIcon = getToolbar().getOverflowIcon();
overflowIcon.setColorFilter(ContextCompat.getColor(this, R.color.colorWhite), PorterDuff.Mode.SRC_ATOP);
getToolbar().setOverflowIcon(overflowIcon);
}
J'écris cette réponse, parce que la réponse acceptée n'a pas fonctionné pour moi (même si elle est correcte). Mais je l'ai résolu d'une autre manière, donc je le partage ici:
Tout d’abord, je n’ai rien ajouté au fichier Gradle. J'utilise Support Library v23.4.0, car c'est le dernier en date au moment de la rédaction de ce message.
Ce qui a fonctionné pour moi est de coder en dur la couleur de teinte ou la couleur du chemin, au lieu d’utiliser une référence de ressource de couleur . Par exemple, utilisez Android:fillColor="#fff"
au lieu 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>
Observez la teinte et la couleur du chemin dans l'extrait de code ci-dessus. Auparavant, j'affectais la couleur à "@color/someColor"
, mais cela indiquait un avertissement indiquant que cela ne fonctionnerait que pour les versions v21 et supérieures et qu'il ne fonctionnait pas en dessous de v21. J'ai donc changé cela en une valeur codée en dur. Encore une fois, il s’agit d’une solution simple de contournement/bidouillage et probablement pas d’une solution correcte.
J'ai écrit une fonction d'assistance (j'utilise une classe d'assistance statique avec des fonctions utiles), qui peut être appelée au début de la fonction onCreate () d'une activité:
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);
}
}
Appelez-le comme ceci dans le onCreate () de l'activité:
Helper.setWhiteBackArrow(getSupportActionBar(), this);