资源。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);
}
我该怎么办?
当前回答
对于所有的Kotlin用户:
context?.let {
val color = ContextCompat.getColor(it, R.color.colorPrimary)
// ...
}
其他回答
使用Android支持库中的ResourcesCompat的getColor(Resources, int, Theme)方法。
int white = ResourcesCompat.getColor(getResources(), R.color.white, null);
我认为它比ContextCompat的getColor(Context, int)更好地反映了您的问题,因为您询问了资源。在API级别23之前,主题将不会被应用,方法将调用getColor(int),但您将不会看到已弃用的警告。主题也可以为空。
在Android Marshmallow中,许多方法都被弃用了。
例如,获取颜色使用
ContextCompat.getColor(context, R.color.color_name);
也可以画出来
ContextCompat.getDrawable(context, R.drawable.drawble_name);
如果你当前的最小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
在Kotlin中的RecyclerView中
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(t: YourObject, listener: OnItemClickListener.YourObjectListener) = with(itemView) {
textViewcolor.setTextColor(ContextCompat.getColor(itemView.context, R.color.colorPrimary))
textViewcolor.text = t.name
}
}
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的官方参考