Android:context.getDrawable()的替代方法


84

context.getDrawable()在项目中使用过这样的代码:

Drawable greenProgressbar = context.getDrawable(R.drawable.custom_progressbargreen);

但是Eclipse给我一个错误,它需要一个Minimum API level of 21。这意味着经过Google的快速搜索后,我的APP只能在上使用Android 5.0。由于并非所有设备都在使用此版本的android,因此我希望有一个替代版本context.getDrawable()

Answers:


200

根据SDK 22文档,已弃用了先前接受的方法:

在android.os.Build.VERSION_CODES#JELLY_BEAN之前,如果此处传递的资源ID是另一个Drawable资源的别名,则此函数将无法正确检索最终配置密度。这意味着,如果别名资源的密度配置与实际资源不同,则返回的Drawable的密度将不正确,从而导致缩放错误。

该答案所指出的,更好的解决方案是使用ContextCompatContextCompat.getDrawable(context, R.drawable.***)


1
我现在接受了这个答案,因为它更相关:)
Bram 2015年

26

尝试getResources()在上下文之后添加一个,这样:

Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen);

应该管用。


4
不推荐使用Resources.getDrawable,而推荐使用Context.getDrawable
Joe Bowbeer 2015年

12

我有一个相同的情况,我想引用现已弃用的getDrawable()方法。

我用过的

myButton.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.ic_btn_off));

希望这能够帮到你


9

我以前也有类似的问题。您是否尝试过这样做?

Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen);

不推荐使用。
Taslim Oseni

2

试试这个:

AppCompatResources.getDrawable(context, R.drawable.*)

1

您应该使用“ getDrawable(id,this.getTheme())”。到目前为止,不建议使用此方法。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    view.setBackground(getResources().getDrawable(R.drawable.radioline,this.getTheme()));
} else {
   view.setBackground(getResources().getDrawable(R.drawable.radioline));
}



1

Kotlin程序员的解决方案如下:

val greenProgressbar = context!!.getDrawable(R.drawable.custom_progressbargreen)

或(来自API 22)

val greenProgressbar = ContextCompat.getDrawable(R.drawable.custom_progressbargreen)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.