2016-02-26 39 views
27

Sui dispositivi pre-Lollipop, l'icona del menu di overflow e il pulsante indietro sulla barra di azione sono diventati neri dopo l'aggiornamento alla Libreria di supporto 23.2.0 . Sono bianchi (che è il colore giusto) prima dell'aggiornamento.Icone freccia indietro e overflow Colori errati nei dispositivi pre-lollipop dopo l'aggiornamento alla libreria di supporto 23.2.0

Il colore corretto è: appare enter image description here

Il colore sbagliato per i dispositivi-Lollipop pre dopo l'aggiornamento, come mostrato con l'icona del menu di overflow:

enter image description here

Il tema in 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> 

Ho cercato here e here ma non ho risolto il problema.

UPDATE: Vedi anche bug report Google: https://code.google.com/p/android/issues/detail?id=201918

+2

Sto avendo questo problema anche .. Succede solo in preLL e funziona bene con v23.1.1 – W0rmH0le

+1

per freccia indietro improvvisamente cambia in colore nero: '( – sector11

risposta

35

ho potuto risolvere.

ho scoperto che AppCompat tema sta usando risorsa seguente pulsante overflow: abc_ic_menu_overflow_material.xml

contenuti di questa risorsa è:

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

Poi, ho collegato i puntini:

  • Primo: Sta usando colorControlNormal
  • Secondo: Usa il vettore

COME FISSARE

Secondo le note Biblioteca V23.2.0 Stampa (LINK HERE), dobbiamo aggiornare build.gradle per aggiungere il supporto al vettore:

build.gradle

Add seguenti righe al vostro costruire Gradle

Gradle 2.0 (non ho provato):

android { 
    defaultConfig { 
     vectorDrawables.useSupportLibrary = true 
    } 
} 

Gradle 1.5 (sto usando questo .. funziona):

android { 
    defaultConfig { 
     generatedDensities = [] 
    } 

    aaptOptions { 
     additionalParameters "--no-version-vectors" 
    } 
} 

fissaggio vostro tema

Questo passaggio può essere ignorato. Alcuni temi di base hanno già impostato colorControlNormal su bianco (ad esempio AppCompat.Dark.ActionBar).

Tuttavia, nel mio caso, tutti i colori dei pulsanti sono rimasti in nero e ho dovuto aggiungere lo colorControlNormal al tema e sovrascriverlo con il colore bianco.

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

Spero che questo possa aiutarti.

Questo è stato il modo in cui ho risolto il problema.

+8

Grazie, che ha funzionato per me! In effetti, ho appena necessario aggiungere le configurazioni Gradle (sto usando anche 1.5), non ho nemmeno bisogno di aggiungere ColorControlNormal. – henry000

+1

funziona senza usare "colorControlNormal" :) ty -> su –

4

Ho riscontrato questo problema durante la modifica della libreria di supporto su 23.2.0. Le icone freccia indietro e overflow sono diventate nere.

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

Come di sostegno 23.1 barra degli strumenti ha ora getOverflowIcon() e setOverflowIcon() metodi

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

    getToolbar().setOverflowIcon(overflowIcon); 
} 
+0

funziona per me .. –

7

Basta aggiornare la libreria di supporto 23.2.1, che risolve il problema.

Per gli utenti AppCompat, le bandiere per l'attivazione di supporto drawable vettore descritte nel post 23.2 blog (http://goo.gl/073Mpo) non sono più necessari per l'utilizzo di AppCompat.

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

+0

Sono su 23.2.1 , ma avendo ancora il problema – Bruce

+0

Falso allarme, l'ho trovato nella mia build.il file gradle generato dalla procedura guidata di Android Studio utilizza 23.2.0 per impostazione predefinita. Proverà questo grazie! – Bruce

0

ho scritto un aiutante (io uso una classe di supporto statico con funzioni utili) funzione, che può essere chiamato all'inizio del onCreate() di un'attività:

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

Chiamatela come questo in onCreate() di attività:

Helper.setWhiteBackArrow(getSupportActionBar(), this); 
3

sto scrivendo questa risposta, perché il accettato la risposta non ha funzionato per me (anche se è corretta). Ma l'ho risolto in un altro modo, quindi lo sto condividendo qui:

Prima di tutto, non ho aggiunto nulla al file gradle. Sto usando la libreria di supporto v23.4.0, poiché è l'ultima al momento della stesura di questo post.

Ciò che ha funzionato per me è il colore della tinta o il colore del percorso, invece di utilizzare un riferimento di risorsa colore. Ad esempio, utilizzare android:fillColor="#fff" anziché 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> 

osservare il colore della tinta e percorso nel frammento di codice di cui sopra. In precedenza assegnavo il colore come "@color/someColor" ma mostrava un avviso che funzionava solo per la v21 e sopra, e in realtà non funzionava sotto la v21. Quindi l'ho cambiato in un valore codificato. Ancora una volta è una soluzione semplice/hack e probabilmente non è una soluzione corretta.