何时使用ContextCompat类

har*_*ita 17 android

我想知道何时ContextCompact在应用程序中使用类.基本上它用于何时使用它?我读过开发者网站,它说ContextCompact是"帮助访问Context中的功能".但这条线意味着什么?

And*_*lov 11

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

例如,如果您之前使用过类似的东西

getContext().getColor(R.color.black);
Run Code Online (Sandbox Code Playgroud)

现在它自Android 6.0(API 22+)以来已被弃用,所以你应该使用:

getContext().getColor(R.color.black,theme);
Run Code Online (Sandbox Code Playgroud)

或者使用ContextCompat哪个填充主题自动取决于你Context的主题:

ContextCompat.getColor(getContext(),R.color.black)
Run Code Online (Sandbox Code Playgroud)

同样的事情 getDrawable

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

  • 例如, getContext() 是 Fragment 内部的一个方法。如果您从 Activity 调用它,则足以编写 *this* 来代替 (2认同)

小智 9

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

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

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

让我们看看源代码 getColor()

/*
 * Returns a color associated with a particular resource ID
 * <p>
 * Starting in {@link android.os.Build.VERSION_CODES#M}, the returned
 * color will be styled for the specified Context's theme.
 *
 * @param id The desired resource identifier, as generated by the aapt
 *           tool. This integer encodes the package, type, and resource
 *           entry. The value 0 is an invalid identifier.
 * @return A single color value in the form 0xAARRGGBB.
 * @throws android.content.res.Resources.NotFoundException if the given ID
 *         does not exist.
 */
@ColorInt
public static final int getColor(Context context, @ColorRes int id) {
    final int version = Build.VERSION.SDK_INT;
    if (version >= 23) {
        return ContextCompatApi23.getColor(context, id);
    } else {
        return context.getResources().getColor(id);
    }
}
Run Code Online (Sandbox Code Playgroud)

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