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

Posted

技术标签:

【中文标题】Android:context.getDrawable() 的替代方案【英文标题】:Android: Alternative for context.getDrawable() 【发布时间】:2015-03-03 23:27:42 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

正如this answer 中指出的,更好的解决方案是使用ContextCompat: ContextCompat.getDrawable(context, R.drawable.***)

【讨论】:

我现在接受了这个答案,因为它更相关:)【参考方案2】:

在上下文后添加getResources()

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

【讨论】:

Resources.getDrawable 被弃用,取而代之的是 Context.getDrawable【参考方案3】:

我遇到了同样的情况,我想引用 getDrawable() 方法,该方法现已弃用。

我用了什么:

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

【讨论】:

【参考方案4】:
Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen);

【讨论】:

已弃用。【参考方案5】:

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

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

或(来自 API 22)

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

【讨论】:

【参考方案6】:
AppCompatResources.getDrawable(context, R.drawable.*)

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

我同意使用 ContextCompact.getDrawable(Context context, int resID)。它对我有用,我的应用针对 API 19。

【讨论】:

【参考方案9】:

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

btn.setImageResource(R.drawable.ic_XXX)

【讨论】:

以上是关于Android:context.getDrawable() 的替代方案的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

android 21 是啥版本

Android逆向-Android基础逆向(2-2)

【Android笔记】android Toast

图解Android - Android核心机制

Android游戏开发大全的目录