Android 何时使用ContextCompat类

Android 何时使用ContextCompat类,android,Android,我想知道什么时候在应用程序中使用ContextCompact类。基本上它是用来做什么的,什么时候用?我读过开发者网站,它说ContextCompact是“在上下文中访问功能的助手”。但是这行是什么意思呢?当您想要检索资源时,例如drawable或color,而不必关心主题时,可以使用ContextCompat类。它提供了访问资源的统一接口,并提供了向后兼容性 常见用例可以是颜色或可绘制等,例如 getDrawable(context,R.drawable.someimage)); getDraw

我想知道什么时候在应用程序中使用
ContextCompact
类。基本上它是用来做什么的,什么时候用?我读过开发者网站,它说
ContextCompact
是“在上下文中访问功能的助手”。但是这行是什么意思呢?

当您想要检索资源时,例如drawable或color,而不必关心主题时,可以使用ContextCompat类。它提供了访问资源的统一接口,并提供了向后兼容性

常见用例可以是颜色或可绘制等,例如

getDrawable(context,R.drawable.someimage)); getDrawable(context,R.color.blue))

让我们看看
getColor()的源代码

/*
*返回与特定资源ID关联的颜色
*
*从{@link android.os.Build.VERSION_CODES#M}开始,返回
*颜色将为指定上下文的主题设置样式。
*
*@param id由aapt生成的所需资源标识符
*工具。这个整数对包、类型和资源进行编码
*进入。值0是无效的标识符。
*@返回格式为0xAARRGGBB的单色值。
*@如果给定ID为,则抛出android.content.res.Resources.NotFoundException
*不存在。
*/
@着色剂
公共静态final int getColor(上下文上下文,@ColorRes int-id){
最终int版本=Build.version.SDK\u int;
如果(版本>=23){
返回contextcompatipapi23.getColor(context,id);
}否则{
返回context.getResources().getColor(id);
}
}

此方法负责API级别的解析,并自动解析状态或主题。在23以上,颜色状态是可访问的,这对您来说是内部解析的,您应该检查每个资源的颜色状态。

ContextCompat
是一个用基本上下文替换某些工作的类

例如,如果您在

getContext().getColor(R.color.black);
现在,由于android 6.0(API 22+)已弃用其,因此您应该使用:

getContext().getColor(R.color.black,theme);
或者使用
ContextCompat
自动填充主题,这取决于
上下文的主题:

ContextCompat.getColor(getContext(),R.color.black)
getDrawable


此外,
ContextCompat
还包含用于API 22+功能的其他方法,如检查权限或向堆栈添加多个活动

基本上,根据官方开发人员网站,它是访问API级别4之后以向后兼容方式引入的上下文中的功能的助手

您可以查看此链接以了解更多详细信息

基本上,getBackgroundResource或getColor方法已被弃用,而使用ContextCompact则是另一种选择。我希望这有帮助

什么是
getContext()
?它告诉我
未解析引用:例如,getContext
getContext()是片段内部的一个方法。如果您从活动中调用它,那么就有足够的内容来编写它
ContextCompat.getColor(getContext(),R.color.black)