我需要在图像按钮上显示一个Drawable对象。有没有办法使用下面的代码(或类似的东西)从android.R.drawable。*包中获取对象?
例如,如果drawableId是android.R.drawable.ic_delete
mContext.getResources().getDrawable(drawableId)
答案 0 :(得分:201)
Drawable d = getResources().getDrawable(android.R.drawable.ic_dialog_email);
ImageView image = (ImageView)findViewById(R.id.image);
image.setImageDrawable(d);
答案 1 :(得分:97)
从 API 21 开始,您应该使用getDrawable(int, Theme)
方法而不是getDrawable(int)
,因为它允许您获取与特定关联的drawable
对象给定resource ID
的{{1}}。调用screen density/theme
deprecated
方法相当于调用getDrawable(int)
。
您应该使用支持库中的以下代码:
getDrawable(int, null)
使用此方法相当于调用:
ContextCompat.getDrawable(context, android.R.drawable.ic_dialog_email)
答案 2 :(得分:9)
从API 21开始,您还可以使用:
ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);
而不是ContextCompat.getDrawable(context, android.R.drawable.ic_dialog_email)
答案 3 :(得分:2)
最好的方法是
button.setBackgroundResource(android.R.drawable.ic_delete);
或这适用于Drawable左侧,类似于右侧等等。
int imgResource = R.drawable.left_img;
button.setCompoundDrawablesWithIntrinsicBounds(imgResource, 0, 0, 0);
和
getResources().getDrawable()
现已弃用
答案 4 :(得分:1)
不推荐使用API 21 getDrawable(int id)
。因此,现在您需要使用
ResourcesCompat.getDrawable(context.getResources(), R.drawable.img_user, null)
但是最好的方法是:您应该创建一个通用类以获取可绘制的颜色,因为如果将来发生任何更改或弃用,则无需在项目中的任何地方进行更改。更改此方法
object ResourceUtils {
fun getColor(context: Context, color: Int): Int {
return ResourcesCompat.getColor(context.getResources(), color, null)
}
fun getDrawable(context: Context, drawable: Int): Drawable? {
return ResourcesCompat.getDrawable(context.getResources(), drawable, null)
}
}
像这样使用这种方法:
Drawable img=ResourceUtils.getDrawable(context, R.drawable.img_user)
image.setImageDrawable(img);
答案 5 :(得分:1)
针对Kotlin程序员的解决方案(来自API 22)
val res = context?.let { ContextCompat.getDrawable(it, R.id.any_resource }