对于新的android API 22,getResources().getDrawable()现在已被弃用。现在最好的方法是只使用getDrawable()。
什么改变了?
对于新的android API 22,getResources().getDrawable()现在已被弃用。现在最好的方法是只使用getDrawable()。
什么改变了?
当前回答
您可以使用
ContextCompat.getDrawable(getApplicationContext(),R.drawable.example);
这是我的工作
其他回答
对于一些即使在应用了这个线程的建议(我以前也是这样的)之后仍然需要解决这个问题的人,请在Application类上添加这行,onCreate()方法
AppCompatDelegate.setComptVectorFromResourcesEnabled(true)
正如这里和这里所建议的,有时需要从资源中访问向量,尤其是在处理菜单项等时
编辑:查看我的博客文章以获得更完整的解释
您应该使用支持库中的以下代码:
ContextCompat.getDrawable(context, R.drawable.***)
使用此方法相当于调用:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
return resources.getDrawable(id, context.getTheme());
} else {
return resources.getDrawable(id);
}
从API 21开始,您应该使用getDrawable(int,Theme)方法而不是getDrawble(int)方法,因为它允许您获取与给定屏幕密度/主题的特定资源ID相关联的可绘制对象。调用不推荐使用的getDrawable(int)方法等同于调用getDrawble(int,null)。
替换此行:getResources().getDrawable(R.drawable.your_drawable)
使用ResourcesCompat.getDrawable(getResources(),R.draable.your_drawable,null)
EDIT
ResourcesCompat现在也被弃用。但您可以使用此选项:
ContextCompat.getDrawable(this,R.drawable.your_drawable)(这里是上下文)
有关详细信息,请单击以下链接:ContextCompat
试试这个
ContextCompat.getDrawable(getActivity(), R.drawable.drawable_resource_name);
如果您的目标SDK>21(棒棒糖或5.0),请使用
context.getDrawable(R.drawable.your_drawable_name)
参见文档