2016-04-20 16 views
12

Sto usando il DrawableCompat per colorazione drawable come sotto, colorazione non sembra funzionare su API 19. Sto usando il supporto versione lib 23.3.0DrawableCompat setTint non lavorante API 19

Drawable drawable = textView.getCompoundDrawables()[drawablePosition]; 
if (drawable != null) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      drawable.setTint(color); 
     } else { 
      DrawableCompat.setTint(DrawableCompat.wrap(drawable), color); 
     } 
    } 

risposta

19

Ho avuto lo stesso problema. Ho combinato i post in https://stackoverflow.com/a/30928051 e provato le API 17, 19, 21, 22, 23 e N Anteprima 3 con SupportLib 23.4.0 per trovare una soluzione.

Anche se viene menzionato, la classe compat utilizzerà un filtro per dispositivi pre-lecca-lecca (vedere https://stackoverflow.com/a/27812472/2170109), non funziona.

Ora, controllo personalmente l'API e utilizzo il seguente codice, che funziona su tutte le API testate (per 17 e versioni successive).

// https://stackoverflow.com/a/30928051/2170109 
    Drawable drawable = DrawableCompat.wrap(ContextCompat.getDrawable(context, R.drawable.vector)); 
    image.setImageDrawable(drawable); 

    /* 
    * need to use the filter | https://stackoverflow.com/a/30880522/2170109 
    * (even if compat should use it for pre-API21-devices | https://stackoverflow.com/a/27812472/2170109) 
    */ 
    int color = ContextCompat.getColor(context, R.color.yourcolor); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     DrawableCompat.setTint(drawable, color); 

    } else { 
     drawable.mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN); 
    } 
+1

Finalmente qualcosa che ha funzionato per me su lecca-lecca . Grazie mille per la condivisione. – Alin

+1

Non funziona per me su Lollipop (API 21). Ho dovuto modificare la versione minima in API 22 (Build.VERSION_CODES.LOLLIPOP_MR1). – Eselfar

+0

Combinare le risposte di hardysim e @Eselfar ha funzionato nel mio caso. – LambergaR

7

Opere su API 15-25 utilizzando libreria di supporto AppCompat (testato su 24.1.1 e superiore).

public static Drawable getTintedDrawable(@NonNull final Context context, 
             @DrawableRes int drawableRes, @ColorRes int colorRes) { 
    Drawable d = ContextCompat.getDrawable(context, drawableRes); 
    d = DrawableCompat.wrap(d); 
    DrawableCompat.setTint(d.mutate(), ContextCompat.getColor(context, colorRes)); 
    return d; 
} 
+0

Ho provato con la libreria di supporto 24.2.1 e purtroppo non funziona su API 19. Mi sono trasferito nella soluzione di @ hardysim. – Eselfar

+0

funziona per me, mi sono stancato sull'API 19 – JFouad

+0

Funziona per me sull'API 19/21/25 con libreria di supporto 25.1.1 – mVck

0

sulla base di @localhost risposta

Drawable d = DrawableCompat.wrap(ContextCompat.getDrawable(this, R.drawable.ic_rate)); DrawableCompat.setTint(d, Color.parseColor("#AAAAAA")); l.setLogo(d);

ho provato su API 19> 25 e funziona bene