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 用户权限 )