我正在使用DrawableCompat来为drawable着色,如下所示,着色似乎在API 19上不起作用。我正在使用支持库版本23.3.0

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

最佳答案

我有同样的问题。我结合了https://stackoverflow.com/a/30928051中的帖子,并尝试使用具有SupportLib 23.4.0的API 17、19、21、22、23和N Preview 3来找到解决方案。

即使提到,compat类也会对棒棒糖播放器之前的设备使用过滤器(请参阅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);
    }

07-24 09:49
查看更多