Die hier vorgeschlagene Antwort funktioniert unter Android 5.0 nicht richtig, wenn Ihre XML-basierte Farbstatusliste auf Themenattribute verweist. Zum Beispiel habe ich eine XML-Farbstatusliste wie folgt:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="?colorPrimary" android:state_enabled="true"/>
<item android:alpha="0.12" android:color="?attr/colorOnSurface"/>
</selector>
Dies als Hintergrund zu verwendenTint von XML funktioniert gut auf Android 5.0 und allem anderen. Wenn ich jedoch versuche, dies in Code wie folgt einzustellen:
(Tu das nicht)
myButton.setSupportButtonTintList(ContextCompat.getColorStateList(myButton.getContext(), R.color.btn_tint_primary));
Es spielt eigentlich keine Rolle, ob ich die Aktivität oder den Kontext der Schaltfläche an die ContextCompat.getColorStateList () -Methode übergebe. Außerdem wird mir weder die richtige Farbstatusliste für das Thema angezeigt, in dem sich die Schaltfläche befindet. Dies liegt daran, dass die Verwendung von Designattributen in Farbstatuslisten erst in API 23 unterstützt wurde und ContextCompat nichts Besonderes unternimmt, um diese Probleme zu beheben. Stattdessen müssen Sie AppCompatResources.getColorStateList () verwenden, das auf Geräten <API 23 eine eigene Ressourcenanalyse / Themenattributauflösung durchführt .
Stattdessen müssen Sie Folgendes verwenden:
myButton.setSupportBackgroundTintList(AppCompatResources.getColorStateList(myButton.getContext(), R.color.btn_tint_primary));
TLDR: Verwenden Sie AppCompatResources und nicht -ContextCompat-, wenn Sie aufgelöste Themenressourcen für alle API-Versionen von Android benötigen.
Weitere Informationen zum Thema finden Sie in diesem Artikel .