Answers:
您的活动应具有方法getResources。做:
Drawable myIcon = getResources().getDrawable( R.drawable.icon );
此代码已弃用:
Drawable drawable = getResources().getDrawable( R.drawable.icon );
使用此代替:
Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.icon);
ResourcesCompat.getDrawable(getResources(), R.drawable.icon, null);
(其中第三个参数是可选的Theme实例)。
getDrawable (int id)
自API 22起该方法已弃用。
相反,您应该使用getDrawable (int id, Resources.Theme theme)
for API 21+
代码看起来像这样。
Drawable myDrawable;
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
myDrawable = context.getResources().getDrawable(id, context.getTheme());
} else {
myDrawable = context.getResources().getDrawable(id);
}
getResources().getDrawable(R.drawable.ic_warning_80dp, context?.theme)
我只想补充一点,如果在使用getDrawable(...)时收到“不赞成使用”消息,则应改用支持库中的以下方法。
ContextCompat.getDrawable(getContext(),R.drawable.[name])
使用此方法时,不必使用getResources()。
这相当于做类似的事情
Drawable mDrawable;
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
mDrawable = ContextCompat.getDrawable(getContext(),R.drawable.[name]);
} else {
mDrawable = getResources().getDrawable(R.id.[name]);
}
这适用于之前和之后的棒棒糖版本。
从矢量资源获取Drawable,无论是否是矢量:
AppCompatResources.getDrawable(context, R.drawable.icon);
注意:
ContextCompat.getDrawable(context, R.drawable.icon);
将产生android.content.res.Resources$NotFoundException
用于向量的资源。