2016-04-20 17 views
12

Używam DrawableCompat do barwienia rozciągliwej jak poniżej, barwienia nie wydaje się działać na API 19. Używam Pomoc Wersja lib 23.3.0DrawableCompat setTint nie pracuje nad 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); 
     } 
    } 

Odpowiedz

19

Miałem ten sam problem. Połączyłem posty w https://stackoverflow.com/a/30928051 i wypróbowałem API 17, 19, 21, 22, 23 i N Preview 3 z SupportLib 23.4.0, aby znaleźć rozwiązanie.

Nawet jeśli wspomniano, że klasa-compat będzie używać filtru dla urządzeń pre-Lollipop (patrz https://stackoverflow.com/a/27812472/2170109), to nie działa.

Teraz sam sprawdzam interfejs API i używam następującego kodu, który działa na wszystkich testowanych API (dla 17 i więcej).

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

końcu coś, że pracował dla mnie na lizaka . Dziękuję bardzo za dzielenie się. – Alin

+1

To nie działa dla mnie na Lollipop (API 21). Musiałem zmienić minimalną wersję na API 22 (Build.VERSION_CODES.LOLLIPOP_MR1). – Eselfar

+0

Łączenie odpowiedzi od hardysim i @Eselfar działało w moim przypadku. – LambergaR

7

Prace nad API 15-25 wykorzystaniem AppCompat Library Support (testowane na 24.1.1 i nowsze).

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

Próbowałem z biblioteką Support 24.2.1 i nie działa na niestety API 19. Wprowadziłem rozwiązanie @ hardysim. – Eselfar

+0

to działa dla mnie, zmęczony API 19 – JFouad

+0

Działa dla mnie na API 19/21/25 z biblioteką wsparcia 25.1.1 – mVck

0

podstawie @localhost odpowiedź

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

próbowałem na API 19> 25 i działa dobrze