调用ContextCompat.getColorStateList报Expected resource of type color错误排查
「Expected resource of type color」高亮错误原因解析
重现场景
颜色选择器XML文件:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:color="@color/white" /> <item android:state_checked="false" android:color="#80FFFFFF" /> </selector>
调用代码:
ContextCompat.getColorStateList(context, R.drawable.bottom_navigation_colors_white)
错误原因
- 资源存放目录不符合规范:ColorStateList类型的XML属于颜色资源范畴,必须放在
res/color/目录下,你当前将其放在res/drawable/目录,导致资源被识别为drawable类型而非color类型。 - Lint静态校验触发提示:
ContextCompat.getColorStateList()方法的第二个参数要求传入R.color.xxx类型的资源ID,Android Studio的Lint工具会做静态类型匹配检查,当传入R.drawable.xxx时就会抛出类型不匹配的高亮提示。不过Android系统在运行时能正确解析该XML的ColorStateList结构,所以不会影响编译和运行。
解决方法
- 将该颜色选择器XML文件从
res/drawable/目录移动到res/color/目录下 - 修改调用代码,使用
R.color前缀的资源ID:
ContextCompat.getColorStateList(context, R.color.bottom_navigation_colors_white)
内容的提问来源于stack exchange,提问作者yaugenka
相关产品推荐
相关产品推荐

