添加app:shadowColor属性后应用崩溃,Logcat报颜色转换错误
嘿,我之前也碰到过这个一模一样的错误!让我帮你捋捋问题出在哪以及怎么解决:
错误原因解析
这个Can't convert value at index 1 to color: type=0x5报错,本质是系统尝试解析shadowColor的颜色值时失败了。这里的type=0x5对应安卓源码里的TYPE_ATTRIBUTE——简单说就是你引用的颜色资源/属性,系统没办法转换成它需要的颜色格式。常见的触发场景有这几种:
- 在不支持
app:shadowColor属性的控件上强行使用了这个属性 - 颜色引用的格式不符合当前场景的要求
- 误用了主题属性(用
?开头)而非具体颜色资源(用@开头)
针对性解决办法
1. 检查控件是否支持app:shadowColor
比如Material Components库的MaterialTextView支持app:shadowColor,但原生TextView在API 28及以下版本是用android:shadowColor这个系统属性的。如果是原生控件,把属性改成:
android:shadowColor="@android:color/black"
2. 替换为十六进制颜色值
如果是资源引用解析失败,直接用具体的十六进制颜色值代替资源引用也能解决问题,效果是一样的:
app:shadowColor="#000000" <!-- 和@android:color/black完全等价 -->
3. 自定义View场景的特殊处理
如果你是在自定义View里使用这个属性,要确保在attrs.xml里正确声明属性的格式:
<declare-styleable name="YourCustomView"> <attr name="shadowColor" format="color|reference" /> </declare-styleable>
然后在代码里获取颜色时,用ContextCompat.getColor()来安全解析,避免类型转换错误:
int shadowColor = ContextCompat.getColor(context, attrs.getAttributeResourceValue(R.styleable.YourCustomView_shadowColor, android.R.color.black));
4. 检查是否误用了主题属性
确认你的颜色引用是@android:color/black而不是?android:color/black。后者是引用主题中的动态属性,如果当前主题没有对应的映射,就会触发解析失败。
内容的提问来源于stack exchange,提问作者Minhaz Muktadir
相关产品推荐
相关产品推荐

