Android中如何通过.setBackgroundColor()引用values/colors.xml中的颜色?
解决Android中setBackgroundColor引用XML颜色资源的问题
嘿,我太懂你遇到的这个小坑了!你直接传R.color.white的时候,其实传的是一个资源ID(整数),但setBackgroundColor()方法需要的是实际解析后的颜色值(比如0xFFFFFFFF这种十六进制的颜色编码),这就是Android Studio给你弹警告的原因。
给你几个靠谱的解决方案,分情况来看:
兼容所有Android版本的推荐写法:用
ContextCompat.getColor()方法,它会自动处理不同API版本的兼容问题,不用你自己判断版本。
如果是在Activity里,直接这么写:title.setBackgroundColor(ContextCompat.getColor(this, R.color.white));如果是在Fragment里,记得传上下文:
title.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.white));API 23以下的旧写法(不推荐,已弃用):在API 23之前,我们会用
getResources().getColor(),但这个方法在Android 6.0之后被标记为弃用了,所以还是优先用上面的兼容方法更稳妥。title.setBackgroundColor(getResources().getColor(R.color.white));
简单说下为啥直接传R.color不行:R.color.white只是系统给这个颜色资源分配的一个整数ID,不是颜色本身的数值。你要是硬传这个ID,系统会把它当成颜色值来解析,结果大概率是个完全不对的奇怪颜色,根本不是你定义的白色~
内容的提问来源于stack exchange,提问作者codepurveyor
相关产品推荐
相关产品推荐

