public static List<ProductActivity> getCatalog(Resources res){
if(catalog == null) {
catalog.add(new Product("Dead or Alive", res
.getDrawable(R.drawable.product_salmon),
"Dead or Alive by Tom Clancy with Grant Blackwood", 29.99));
catalog.add(new Product("Switch", res
.getDrawable(R.drawable.switchbook),
"Switch by Chip Heath and Dan Heath", 24.99));
catalog.add(new Product("Watchmen", res
.getDrawable(R.drawable.watchmen),
"Watchmen by Alan Moore and Dave Gibbons", 14.99));
}
}
10 回答
您有一些选项可以正确(和 future proof )方式处理此弃用,具体取决于您要加载的drawable类型:
A) 具有主题属性的drawables
您将在活动主题指示时获得样式化的Drawable . 这可能就是你所需要的 .
B) 没有主题属性的drawables
你将以旧的方式得到你的风格 . 请注意:
ResourcesCompat.getDrawable()
是 not 已弃用!EXTRA) 具有来自另一主题的主题属性的drawables
编辑:请参阅我关于该主题的博文,以获得更完整的解释
您应该使用支持库中的以下代码:
使用此方法相当于调用:
从API 21开始,您应该使用
getDrawable(int, Theme)
方法而不是getDrawable(int)
,因为它允许您获取与给定屏幕密度/主题的特定资源ID关联的可绘制对象 . 调用已弃用的getDrawable(int)
方法等同于调用getDrawable(int, null)
.替换此行:
getResources().getDrawable(R.drawable.your_drawable)
与
ResourcesCompat.getDrawable(getResources(), R.drawable.your_drawable, null)
编辑
ResourcesCompat
现在也已弃用 . 但你可以用这个:ContextCompat.getDrawable(this, R.drawable.your_drawable)
(这里this
是上下文)有关更多详细信息,请访问此链接:ContextCompat
getResources() . getDrawable()在API级别22中已弃用 . 现在我们必须添加主题:
getDrawable (int id, Resources.Theme theme)(在API级别21中添加)
这是一个例子:
这是如何验证更高版本的示例:
您可以使用
这对我有用
只是我在数组中修复问题以加载listView的一个例子,希望它有所帮助 .
试试这个:
en api等级14
Build.VERSION_CODES.LOLLIPOP现在应该更改为BuildVersionCodes.Lollipop,即:
如果您的目标是SDK> 21(棒棒糖或5.0),请使用
See docs