资源。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);
}
我该怎么办?
当前回答
从Android支持库23开始, ContextCompat中添加了一个新的getColor()方法。
它在官方JavaDoc中的描述:
返回与特定资源ID相关联的颜色 从M开始,返回的颜色将为指定上下文的主题设置样式。
所以,只需调用:
ContextCompat.getColor(context, R.color.your_color);
你可以在GitHub上查看ContextCompat.getColor()源代码。
其他回答
如果你不需要这些资源,使用parseColor(String): Color.parseColor(“# cc0066”)
如果你当前的最小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
从Android支持库23开始, ContextCompat中添加了一个新的getColor()方法。
它在官方JavaDoc中的描述:
返回与特定资源ID相关联的颜色 从M开始,返回的颜色将为指定上下文的主题设置样式。
所以,只需调用:
ContextCompat.getColor(context, R.color.your_color);
你可以在GitHub上查看ContextCompat.getColor()源代码。
对于所有的Kotlin用户:
context?.let {
val color = ContextCompat.getColor(it, R.color.colorPrimary)
// ...
}
最好的等效方法是使用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)