资源。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);
}
我该怎么办?
当前回答
getColor(int):此方法在API级别23中已弃用。 使用getColor(int, android.content.res.Resources.Theme)代替。
我尝试minSDK = 21:
if(Build.VERSION.SDK_INT < 23) {
resources.getColor(R.color.rippelColor, null)
} else {
resources.getColor(R.color.rippelColor)
}
来自developer.android.com的官方参考
其他回答
我不想仅为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中消失。
这是我在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);
如果你当前的最小API级别是23,你可以简单地使用getColor(),就像我们使用getString()获取字符串资源一样:
//example
textView.setTextColor(getColor(R.color.green));
// if `Context` is not available, use with context.getColor()
你可以限制API级别低于23:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
textView.setTextColor(getColor(R.color.green));
} else {
textView.setTextColor(getResources().getColor(R.color.green));
}
但为了简单起见,你可以像下面这样回答:
textView.setTextColor(ContextCompat.getColor(context, R.color.green))
从资源。
来自ContextCompat AndroidX。
来自ContextCompat Support
getColor(int):此方法在API级别23中已弃用。 使用getColor(int, android.content.res.Resources.Theme)代替。
我尝试minSDK = 21:
if(Build.VERSION.SDK_INT < 23) {
resources.getColor(R.color.rippelColor, null)
} else {
resources.getColor(R.color.rippelColor)
}
来自developer.android.com的官方参考
我也很沮丧。我的需求非常直截了当。我想要的只是资源中的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;
}
对于所有的Kotlin用户:
context?.let {
val color = ContextCompat.getColor(it, R.color.colorPrimary)
// ...
}