Aus der Dokumentation für Resources
-int getColor (int id, Resources.Theme theme)
:
Gibt eine Thema-Farbe ganze Zahl mit einer ID bestimmten Ressource zugeordnet ist. Wenn die Ressource eine komplexe ColorStateList enthält, wird die Standardfarbe aus der Gruppe zurückgegeben.
So ist das Ressource-ID mehr als nur eine einfache Farbe sein kann, könnte es so etwas wie dies:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true"
android:color="@color/sample_focused" />
<item android:state_pressed="true"
android:state_enabled="false"
android:color="@color/sample_disabled_pressed" />
<item android:state_enabled="false"
android:color="@color/sample_disabled_not_pressed" />
<item android:color="@color/sample_default" />
</selector>
in diesem Fall die Farbe wäre @color/sample_default
zurückgegeben.
Aber wenn man will Attribut für die Farben, so etwas wie diese
<item android:color="?attr/sample_default_color" />
verwenden, würden Sie den Attributwert innerhalb des Themas, um zugreifen müssen, um vollständig den Farbwert zu lösen.
Laut Alex Lockwood's blog post sind diese Ressourcen nicht an ein Design gebunden. Wenn Sie die alte Methode mit einer Farbstatusliste aufrufen, die Attribute verwendet, wird eine Ausnahme ausgelöst. Vor Marshmallow konnten Sie aufgrund dieser Einschränkung keine Attribute in Farbzustandslisten verwenden.
Wie es der Zufall wollte, hat Alex Lockwood vor ein paar Tagen einen Artikel darüber veröffentlicht: http://www.androiddesignpatterns.com/2016/08/contextcompat-getcolor-getdrawable.html –