如何在RecyclerView中正确调用getColor获取colors.xml颜色资源
从colors.xml获取颜色资源的正确实现方法
setBackgroundColor()要求传入解析后的ARGB色值整数,直接传入R.color.magenta这类资源ID会触发报错,这是问题的核心原因。- 旧的
resources.getColor()方法在API 23及以上版本已废弃,未传入主题参数时会出现适配异常,不推荐使用。
推荐兼容写法(适配全API版本)
直接使用ContextCompat完成颜色解析,不需要手动处理系统版本判断:
override fun onBindViewHolder(holder: NavlogViewHolder, position: Int) { // 直接从holder的itemView获取上下文,无需额外给Adapter传Context实例 val magentaColor = ContextCompat.getColor(holder.itemView.context, R.color.magenta) holder.myTextView.setBackgroundColor(magentaColor) }
可选写法(仅API 23+适用)
如果你的项目最小支持API 23,可以直接调用带主题参数的原生方法:
override fun onBindViewHolder(holder: NavlogViewHolder, position: Int) { val magentaColor = holder.itemView.context.resources.getColor(R.color.magenta, holder.itemView.context.theme) holder.myTextView.setBackgroundColor(magentaColor) }
注意:需确保
res/values/colors.xml中已经正确定义对应名称的色值,示例如下:<color name="magenta">#FFFF00FF</color>
内容的提问来源于stack exchange,提问作者Artyum
相关产品推荐
相关产品推荐

