主App向自研库App传递主题主色触发Resources$NotFoundException错误
问题分析与解决
错误原因
你遇到的Resources$NotFoundException核心问题是混淆了颜色整数值(ColorInt)和资源ID的概念:
- 主App中
typedValue.data返回的0xffbb86fc是直接的ARGB颜色值(0xff代表颜色不透明,后六位是RGB分量),属于可以直接用于设置UI颜色的原始数值。 - 库App里调用
res.getColor(primaryColor)时,错误地把这个颜色值当成了Android资源ID(资源ID是指向res目录中定义的颜色资源的整数标识,比如R.color.primary对应的数值),系统找不到对应资源,因此抛出异常。
解决方案
直接使用传递过来的ColorInt即可,无需再通过资源解析:
修正后的库App代码
// 直接接收主App传递的颜色值 val primaryColor = intent.getIntExtra("PRIMARY_COLOR", 0) // 直接用该值设置UI颜色,示例: someView.setBackgroundColor(primaryColor) someTextView.setTextColor(primaryColor)
补充说明
如果场景确实需要传递资源ID(而非直接颜色值),但主App是动态主题,colorPrimary对应的资源ID会随主题变化,此时需要传递R.attr.colorPrimary对应的属性ID,再在库App中结合主App的主题上下文解析,但这种方式实现复杂度更高。而你当前的场景中,主App已经解析出实际颜色值,直接传递并使用这个值是最简单且正确的做法。
内容的提问来源于stack exchange,提问作者Nishant
相关产品推荐
相关产品推荐

