getColor(int id)在Android 6.0 Marshmallow(API 23)上弃用
Resources.getColor(int id)
方法已被弃用。
@ColorInt
@Deprecated
public int getColor(@ColorRes int id) throws NotFoundException {
return getColor(id, null);
}
我该怎么办?
从Android支持库23开始,
一个新的getColor()方法已被添加到ContextCompat
。
它来自官方JavaDoc的描述:
返回与特定资源ID关联的颜色
从M开始,返回的颜色将为指定的上下文主题设计样式。
所以, 只需打电话 :
ContextCompat.getColor(context, R.color.your_color);
您可以检查GitHub上的ContextCompat.getColor()
源代码。
TL;博士:
ContextCompat.getColor(context, R.color.my_color)
说明:
您需要使用ContextCompat.getColor(),它是Support V4 Library的一部分(它将适用于所有以前的API)。
ContextCompat.getColor(context, R.color.my_color)
如果您尚未使用支持库,则需要将以下行添加到应用程序build.gradle
的dependencies
数组中(注意:如果您已经使用appcompat(V7)库,则它是可选的):
compile 'com.android.support:support-v4:23.0.0' # or any version above
如果您关心主题,文档指定:
从M开始,返回的颜色将为指定的上下文主题设计样式
我不想为getColor包含支持库,所以我正在使用类似的东西
public static int getColorWrapper(Context context, int id) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return context.getColor(id);
} else {
//noinspection deprecation
return context.getResources().getColor(id);
}
}
我猜代码应该工作得很好,而且不赞成的getColor
不能从API <23中消失。
上一篇: getColor(int id) deprecated on Android 6.0 Marshmallow (API 23)