XML 기반 색상 상태 목록이 테마 속성을 참조하는 경우 여기에 제안 된 답변이 Android 5.0에서 제대로 작동하지 않습니다. 예를 들어 다음과 같은 xml 색상 상태 목록이 있습니다.
<?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>
이것을 xml의 backgroundTint로 사용하면 안드로이드 5.0과 다른 모든 것에서 잘 작동합니다. 그러나 다음과 같은 코드에서 이것을 설정하려고하면 :
(이러지 마세요)
myButton.setSupportButtonTintList(ContextCompat.getColorStateList(myButton.getContext(), R.color.btn_tint_primary));
실제로 Activity 또는 버튼의 컨텍스트를 ContextCompat.getColorStateList () 메서드에 전달하는지 여부는 중요하지 않으며 버튼이있는 테마와 관련하여 적절한 색상 상태 목록을 제공하지도 않습니다. 이는 색상 상태 목록에서 테마 속성을 사용하는 것이 api 23과 ContextCompat가이를 해결하기 위해 특별한 작업을 수행하지 않을 때까지 지원되지 않았기 때문입니다. 대신 장치 <API 23에서 자체 리소스 구문 분석 / 테마 속성 확인 을 수행하는 AppCompatResources.getColorStateList () 를 사용해야합니다 .
대신 다음을 사용해야합니다.
myButton.setSupportBackgroundTintList(AppCompatResources.getColorStateList(myButton.getContext(), R.color.btn_tint_primary));
TLDR : Android의 모든 API 버전에서 해결 된 테마 리소스가 필요한 경우 -ContextCompat-가 아닌 AppCompatResources를 사용 합니다.
주제에 대한 자세한 내용 은이 문서를 참조하십시오 .