Ответ 1
Вы также можете использовать setSupportBackgroundTintList
Применяет оттенок к выделенному фону. Не меняет текущий режим оттенков, по умолчанию это SRC_IN.
Последующие вызовы в View.setBackground(Drawable) автоматически изменят способ рисования и применит указанный режим оттенков и оттенков.
Также посмотрите ViewCompat.setBackgroundTintList()
Применяет оттенок к выделенному фону.
Это всегда будет действовать при работе на API v21 или новее. При запуске на платформах, предшествующих API v21, он будет действовать, только если представление реализует интерфейс TintableBackgroundView.
Я нашел решение здесь, на SO, которое я использовал до этого и это:
public static void setButtonTint(Button button, ColorStateList tint) {
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP && button instanceof AppCompatButton) {
((AppCompatButton) button).setSupportBackgroundTintList(tint);
} else {
ViewCompat.setBackgroundTintList(button, tint);
}
}
Это работает для меня. Я надеюсь, что это сработает и для вас.