对于新的android API 22,getResources().getDrawable()现在已被弃用。现在最好的方法是只使用getDrawable()。
什么改变了?
对于新的android API 22,getResources().getDrawable()现在已被弃用。现在最好的方法是只使用getDrawable()。
什么改变了?
当前回答
在Kotlin,您可以使用扩展
fun Context.getMyDrawable(id : Int) : Drawable?{
return ContextCompat.getDrawable(this, id)
}
然后使用like
context.getMyDrawable(R.drawable.my_icon)
其他回答
如果您需要从其他SDK 23及以上版本的应用程序中提取
PackageManager manager = getApplicationContext().getPackageManager();
Resources resources = null;
try {
resources = manager.getResourcesForApplication("com.anyapp");
}
catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
assert resources != null;
Drawable notiIcon = ResourcesCompat.getDrawable(resources, current.iconId/* drawable resource id */, null);
对于一些即使在应用了这个线程的建议(我以前也是这样的)之后仍然需要解决这个问题的人,请在Application类上添加这行,onCreate()方法
AppCompatDelegate.setComptVectorFromResourcesEnabled(true)
正如这里和这里所建议的,有时需要从资源中访问向量,尤其是在处理菜单项等时
您可以使用
ContextCompat.getDrawable(getApplicationContext(),R.drawable.example);
这是我的工作
现在您需要这样实现
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //>= API 21
//
} else {
//
}
只需执行一行代码就足够了,ContextCompat.getDrawable将处理所有问题
ContextCompat.getDrawable(this, R.drawable.your_drawable_file)
替换此行:getResources().getDrawable(R.drawable.your_drawable)
使用ResourcesCompat.getDrawable(getResources(),R.draable.your_drawable,null)
EDIT
ResourcesCompat现在也被弃用。但您可以使用此选项:
ContextCompat.getDrawable(this,R.drawable.your_drawable)(这里是上下文)
有关详细信息,请单击以下链接:ContextCompat