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

Bra*_*ram 77 java eclipse android android-drawable

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

Drawable greenProgressbar = context.getDrawable(R.drawable.custom_progressbargreen);
Run Code Online (Sandbox Code Playgroud)

但是Eclipse给了我一个它需要的错误Minimum API level of 21.这意味着在快速谷歌搜索后,我的APP将只能使用Android 5.0.由于并非所有设备都使用此版本的Android,我想有一个替代品context.getDrawable().

小智 189

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

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

正如在这个答案中指出的那样,更好的解决方案是使用ContextCompat: ContextCompat.getDrawable(context, R.drawable.***)


小智 24

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

Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen);
Run Code Online (Sandbox Code Playgroud)

应该管用.

  • 不推荐使用Resources.getDrawable,而使用Context.getDrawable (4认同)

Uma*_*nda 10

我有同样的情况,我想引用getDrawable()方法,现在已弃用.

我用过的,

myButton.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.ic_btn_off));
Run Code Online (Sandbox Code Playgroud)

希望对你有帮助


小智 9

我之前遇到过类似的问题.你试过这样做吗?

Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen);
Run Code Online (Sandbox Code Playgroud)