Android getResources()。getDrawable()弃用API 22
使用新的android API 22 getResources().getDrawable()
现在已被弃用。 现在最好的方法是只使用getDrawable()
。
什么改变?
你有一些选项来处理这个弃用的权利(和未来的证明 )的方式,这取决于你正在加载的绘图类型:
A)可以绘制主题属性
ContextCompat.getDrawable(getActivity(), R.drawable.name);
当您的活动主题指示您将获得一个样式的Drawable。 这可能是你需要的。
B) 没有主题属性的drawables
ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);
你会以旧的方式得到你的无风格可绘画。 请注意: ResourcesCompat.getDrawable()
不被弃用!
额外) drawables 与主题属性从另一个主题
ResourcesCompat.getDrawable(getResources(), R.drawable.name, anotherTheme);
编辑:看到我的博客文章的主题更完整的解释
您应该使用支持库中的以下代码:
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)
方法而不是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)
(这里是上下文)
有关更多详细信息,请点击此链接: ContextCompat
getResources().getDrawable()
在API级别22已被弃用。现在我们必须添加主题:
getDrawable(int id,Resources.Theme主题) (在API级别21中添加)
这是一个例子:
myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage, getApplicationContext().getTheme()));
这是一个如何验证以后版本的例子:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //>= API 21 myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage, getApplicationContext().getTheme())); } else { myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage)); }
您可以使用
ContextCompat.getDrawable(getApplicationContext(),R.drawable.example);
这对我有用
只是一个例子,我如何解决这个问题在一个数组加载一个listView,希望它有帮助。
mItems = new ArrayList<ListViewItem>(); // Resources resources = getResources(); // mItems.add(new ListViewItem(resources.getDrawable(R.drawable.az_lgo), getString(R.string.st_az), getString(R.string.all_nums))); // mItems.add(new ListViewItem(resources.getDrawable(R.drawable.ca_lgo), getString(R.string.st_ca), getString(R.string.all_nums))); // mItems.add(new ListViewItem(resources.getDrawable(R.drawable.co_lgo), getString(R.string.st_co), getString(R.string.all_nums))); mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.az_lgo, null), getString(R.string.st_az), getString(R.string.all_nums))); mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.ca_lgo, null), getString(R.string.st_ca), getString(R.string.all_nums))); mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.co_lgo, null), getString(R.string.st_co), getString(R.string.all_nums)));
尝试这个:
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)); } }
Build.VERSION_CODES.LOLLIPOP现在应该改为BuildVersionCodes.Lollipop即:
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) { this.Control.Background = this.Resources.GetDrawable(Resource.Drawable.AddBorder, Context.Theme); } else { this.Control.Background = this.Resources.GetDrawable(Resource.Drawable.AddBorder); }