web-dev-qa-db-ja.com

AndroidパッケージのリソースIDからDrawableオブジェクトを取得するにはどうすればよいですか?

画像ボタンに表示するDrawableオブジェクトを取得する必要があります。 Android.R.drawable。*パッケージからオブジェクトを取得するために、以下のコード(またはそれに似たもの)を使用する方法はありますか?

たとえば、drawableIdがAndroid.R.drawable.ic_deleteの場合

mContext.getResources().getDrawable(drawableId)
141
Blaskovicz
Drawable d = getResources().getDrawable(Android.R.drawable.ic_dialog_email);
ImageView image = (ImageView)findViewById(R.id.image);
image.setImageDrawable(d);
201
Pete Houston

API 21の時点で、特定のresource IDの特定のscreen density/themeに関連付けられたdrawableオブジェクトをフェッチできるため、getDrawable(int, Theme)の代わりにgetDrawable(int)メソッドを使用する必要があります。 deprecatedgetDrawable(int)メソッドの呼び出しは、getDrawable(int, null)の呼び出しと同等です。

代わりに、サポートライブラリの次のコードを使用する必要があります。

ContextCompat.getDrawable(context, Android.R.drawable.ic_dialog_email)

このメソッドを使用することは、次の呼び出しと同等です。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
    return resources.getDrawable(id, context.getTheme());
} else {
    return resources.getDrawable(id);
}
98
msoliman

API 21の時点では、次のものも使用できます。

   ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);

ContextCompat.getDrawable(context, Android.R.drawable.ic_dialog_email)の代わりに

9
Zain

最善の方法は

 button.setBackgroundResource(Android.R.drawable.ic_delete);

または Drawableの左の場合はこれ、右の場合はそのようなもの。

int imgResource = R.drawable.left_img;
button.setCompoundDrawablesWithIntrinsicBounds(imgResource, 0, 0, 0);

そして

getResources().getDrawable()は非推奨になりました

2