对于新的android API 22,getResources().getDrawable()现在已被弃用。现在最好的方法是只使用getDrawable()。

什么改变了?


当前回答

试试看:

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

其他回答

根据要加载的绘图类型,您可以选择以正确的方式(以及将来的证明)处理此弃用:


A) 具有主题属性的绘图

ContextCompat.getDrawable(getActivity(), R.drawable.name);

您将按照“活动”主题的指示获得一个样式化的Drawable。这可能就是你需要的。


B) 无主题属性的绘图

ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);

你会像以前一样得到你的无样式抽屉。请注意:ResourcesCompat.getDrawable()未被弃用!


EXTRA)具有来自另一个主题的主题属性的绘图

ResourcesCompat.getDrawable(getResources(), R.drawable.name, anotherTheme);

Build.VERSION_CODES.LOLLIOP现在应更改为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);
}

现在您需要这样实现

  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

en-api级别14

marker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.miubicacion, null));