2016-04-20 2 views
12

Я использую DrawableCompat для колеровки рисуют, как показано ниже, кажется, не работает на API 19. Я использую поддержку Lib версии тонировки 23.3.0DrawableCompat setTint не работает на 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); 
     } 
    } 

ответ

0

Я думаю, что после того, как вы соскоблили свою цель, вам нужно будет позвонить mutate(). См. Это: https://stackoverflow.com/a/30928051/3032209

+0

Не работает после добавления мутировать() – 3xplore

19

У меня была та же проблема. Я объединил записи в https://stackoverflow.com/a/30928051 и попробовал API 17, 19, 21, 22, 23 и N Preview 3 с SupportLib 23.4.0, чтобы найти решение.

Даже если упом нуто, что совместимый класс будет использовать фильтр для предустановочных устройств (см. https://stackoverflow.com/a/27812472/2170109), он не работает.

Теперь я проверяю API самостоятельно и использую следующий код, который работает со всеми проверенными API (для 17 и выше).

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

Наконец-то, что работал для меня на леденец , Спасибо вам большое за обмен. – Alin

+1

Это не работает для меня на Lollipop (API 21). Мне пришлось изменить минимальную версию на API 22 (Build.VERSION_CODES.LOLLIPOP_MR1). – Eselfar

+0

Сочетание ответов с hardysim и @Eselfar работало в моем случае. – LambergaR

7

Работы по API 15-25 с использованием библиотеки поддержки AppCompat (проверено на 24.1.1 и выше).

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

Я пробовал в Библиотеке поддержки 24.2.1 и, к сожалению, к API 19 не работает. Я перешел на решение @ hardysim. – Eselfar

+0

это работает для меня, я устал от API 19 – JFouad

+0

Работает для меня по API 19/21/25 с поддержкой библиотеки 25.1.1 – mVck

0

на основе @localhost ответа

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

Я попытался по API 19> 25, и он хорошо работает

Смежные вопросы