资源。getColor(int id)方法已弃用。
@ColorInt
@Deprecated
public int getColor(@ColorRes int id) throws NotFoundException {
return getColor(id, null);
}
我该怎么办?
资源。getColor(int id)方法已弃用。
@ColorInt
@Deprecated
public int getColor(@ColorRes int id) throws NotFoundException {
return getColor(id, null);
}
我该怎么办?
当前回答
如果你不需要这些资源,使用parseColor(String): Color.parseColor(“# cc0066”)
其他回答
tl; diana:
ContextCompat.getColor(context, R.color.my_color)
解释:
您将需要使用ContextCompat.getColor(),它是Support V4库的一部分(它将适用于前面的所有api)。
ContextCompat.getColor(context, R.color.my_color)
如果你还没有使用支持库,你将需要添加以下一行到你的应用程序构建中的依赖数组。gradle(注意:如果你已经使用了appcompat (V7)库,它是可选的):
compile 'com.android.support:support-v4:23.0.0' # or any version above
如果你关心主题,文档指定:
从M开始,返回的颜色将为指定的样式 上下文的主题
最好的等效方法是使用ContextCompat。getColor和ResourcesCompat。色鬼。我做了一些扩展函数用于快速迁移:
@ColorInt
fun Context.getColorCompat(@ColorRes colorRes: Int) = ContextCompat.getColor(this, colorRes)
@ColorInt
fun Fragment.getColorCompat(@ColorRes colorRes: Int) = activity!!.getColorCompat(colorRes)
@ColorInt
fun Resources.getColorCompat(@ColorRes colorRes: Int) = ResourcesCompat.getColor(this, colorRes, null)
从Android支持库23开始, ContextCompat中添加了一个新的getColor()方法。
它在官方JavaDoc中的描述:
返回与特定资源ID相关联的颜色 从M开始,返回的颜色将为指定上下文的主题设置样式。
所以,只需调用:
ContextCompat.getColor(context, R.color.your_color);
你可以在GitHub上查看ContextCompat.getColor()源代码。
如果你不需要这些资源,使用parseColor(String): Color.parseColor(“# cc0066”)
我也很沮丧。我的需求非常直截了当。我想要的只是资源中的ARGB颜色,所以我写了一个简单的静态方法。
protected static int getARGBColor(Context c, int resId)
throws Resources.NotFoundException {
TypedValue color = new TypedValue();
try {
c.getResources().getValue(resId, color, true);
}
catch (Resources.NotFoundException e) {
throw(new Resources.NotFoundException(
String.format("Failed to find color for resourse id 0x%08x",
resId)));
}
if (color.type != TYPE_INT_COLOR_ARGB8) {
throw(new Resources.NotFoundException(
String.format(
"Resourse id 0x%08x is of type 0x%02d. Expected TYPE_INT_COLOR_ARGB8",
resId, color.type))
);
}
return color.data;
}