如果您通过以下的代码来获取定义的颜色值
context.getResources().getColor(R.color.some_color_resource_id);
在 Android Studio 中会有一个 lint 警告,提示您 Resources#getColor(int) 在 Marshmallow中被废弃了,建议使用主题可知的 Resources#getColor(int, Theme) 函数。 为了避免该警告,则可以使用 ContextCompat:
ContextCompat.getColor(context, R.color.some_color_resource_id);
该函数的实现是这样的:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return context.getResources().getColor(id, context.getTheme());
} else {
return context.getResources().getColor(id);
}
看起来很简单。但是为什么会这样呢? 为什么会开始使用带主题的函数而废弃之前的函数呢?
Resources#getColor(int) & Resources#getColorStateList(int) 的问题
首先来看看这两个被废弃的函数是干啥的:
– Resources#getColor(int)返回一个资源 id 对应的颜色值,如果该资源为 ColorStateList则返回 ColorStateList的默认颜色值
–Resources#getColorStateList(int)返回对应的 ColorStat