使用新的 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