协慌网

登录 贡献 社区

Android getResources()。getDrawable()弃用的 API 22

使用新的 android API 22,现在不建议使用getResources().getDrawable()现在最好的方法是仅使用getDrawable()

发生了什么变化?

答案

您有一些选择来以正确的方式(以及将来的证明)来处理这种弃用,这取决于您要加载的绘图类型:


A)具有主题属性的可绘制对象

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

您将按照 Activity 主题的指示获得样式化的 Drawable。这可能就是您所需要的。


B)没有主题属性的绘画

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

您将以旧的方式获得未样式化的可绘制对象。请注意:推荐使用ResourcesCompat.getDrawable()


EXTRA)具有来自另一个主题的主题属性的可绘制对象

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)下面this是上下文)

有关更多详细信息,请单击此链接:ContextCompat