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); }