XML tabanlı renk durumu listeniz temalı özniteliklere referans veriyorsa, burada önerilen yanıt Android 5.0'da düzgün çalışmıyor .. Örneğin, şu şekilde bir xml renk durumu listem var:
<?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>
Bunu xml'den arka planım olarak kullanmak Android 5.0 ve diğer her şeyde gayet iyi çalışıyor. Ancak bunu şu şekilde bir kodda ayarlamaya çalışırsam:
(Bunu yapma)
myButton.setSupportButtonTintList(ContextCompat.getColorStateList(myButton.getContext(), R.color.btn_tint_primary));
Aslında Activity'i veya düğmenin bağlamını ContextCompat.getColorStateList () yöntemine aktarmamın bir önemi yok, ne de bana düğmenin içinde olduğu temaya göre uygun renk durumu listesini vermez. Bunun nedeni, renk durumu listelerinde tema niteliklerinin kullanılmasının api 23'e kadar desteklenmemesi ve ContextCompat'ın bunları çözmek için özel bir şey yapmamasıdır. Bunun yerine , <API 23 cihazlarında kendi kaynak ayrıştırma / tema öznitelik çözümlemesini yapan AppCompatResources.getColorStateList () kullanmanız gerekir .
Bunun yerine şunu kullanmalısınız:
myButton.setSupportBackgroundTintList(AppCompatResources.getColorStateList(myButton.getContext(), R.color.btn_tint_primary));
TLDR: kullanım AppCompatResources değil -ContextCompat- android tüm API sürümleri arasında çözülmesi temalı kaynağa ihtiyaç olacak olursa.
Konuyla ilgili daha fazla bilgi için bu makaleye bakın .