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

Android: Alternative for context.getDrawable()

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

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

但是 Eclipse 给我一个错误,它需要 Minimum API level of 21。这意味着在快速 google 搜索后,我的应用程序将只能在 Android 5.0 上使用。由于并非所有设备都使用此版本的 android,因此我想为 context.getDrawable().

提供一个替代方案
Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen);

上下文后加一个getResources()

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

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

Prior to android.os.Build.VERSION_CODES#JELLY_BEAN, this function would not correctly retrieve the final configuration density when the resource ID passed here is an alias to another Drawable resource. This means that if the density configuration of the alias resource is different than the actual resource, the density of the returned Drawable would be incorrect, resulting in bad scaling.

正如 better solution would be to use ContextCompat 中指出的那样: ContextCompat.getDrawable(context, R.drawable.***)

我遇到了同样的情况,我想参​​考 getDrawable() 现在已弃用的方法。

我用过的:

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

你应该使用“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));
}

我同意使用 ContextCompact.getDrawable(Context context, int resID)。它适用于我和我的应用程序目标 API 19.

您也可以直接设置资源而不使用可绘制对象 (Kotlin):

btn.setImageResource(R.drawable.ic_XXX)

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

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

或(来自API 22)

val greenProgressbar = ContextCompat.getDrawable(R.drawable.custom_progressbargreen)