不推荐使用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 开始,将为指定的 Context 主题设置返回颜色的样式。
因此,只需致电:
ContextCompat.getColor(context, R.color.your_color);
您可以在 GitHub 上ContextCompat.getColor()
源代码。
tl; dr:
ContextCompat.getColor(context, R.color.my_color)
解释:
您将需要使用ContextCompat.getColor() ,它是 Support V4 库的一部分(它将适用于所有以前的 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 开始,将为指定的 Context 主题设置返回的颜色样式
我不想只为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
不能从 < 23 的 API 中消失。
这就是我在 Kotlin 中使用的:
/**
* Returns a color associated with a particular resource ID.
*
* Wrapper around the deprecated [Resources.getColor][android.content.res.Resources.getColor].
*/
@Suppress("DEPRECATION")
@ColorInt
fun getColorHelper(context: Context, @ColorRes id: Int) =
if (Build.VERSION.SDK_INT >= 23) context.getColor(id) else context.resources.getColor(id);