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


156

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

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

mContext.getResources().getDrawable(drawableId)

回答:


222
Drawable d = getResources().getDrawable(android.R.drawable.ic_dialog_email);
ImageView image = (ImageView)findViewById(R.id.image);
image.setImageDrawable(d);

また、アプリケーションコンテキストを使用するとうまくいくようです。
Blaskovicz、2011年

20
API 22以降でgetDrawable(int id)は非推奨です。getDrawable(int id, Resources.Theme theme)代わりに使用してください。メソッドgetTheme()は役立つはずです。
Isaac Zais

1
少し疑問があります。このコードでは、「リソースタイプのメソッドgetDrawable(int)は非推奨です」です。1つのSOの回答によると1. Javaで非推奨のメソッドまたはクラスを使用するのは間違っていますか?非推奨の定義から:「@Deprecatedアノテーションが付けられたプログラム要素は、通常は危険であるため、またはより良い代替手段が存在するために、プログラマが使用を推奨されない要素です。」これのより良い代替案は何ですか?
キラー

107

とおりAPI 21、あなたが使用する必要がありますgetDrawable(int, Theme)代わりにする方法をgetDrawable(int)、それはあなたがフェッチすることを可能にするよう、drawable特定の関連付けられたオブジェクトresource ID与えられたためにscreen density/themedeprecated getDrawable(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);
}

context.getDrawable(id);に相当するようですresources.getDrawable(id, context.getTheme());
ErickBergmann 2017年

あなたはサポートライブラリを持っている場合、これは1行で行うことができますResourcesCompat.getDrawable(resources, id, context.getTheme());
k2col

9

API 21以降、次のものも使用できます。

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

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


2
選択の詳細な説明を提供して
いただけません

3

最善の方法は

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

または、これはドローアブルの左の場合、右の場合のようなものです。

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

そして

getResources().getDrawable() 廃止されました


0

API 21以降getDrawable(int id)は非推奨です。 だから今あなたは使う必要があります

ResourcesCompat.getDrawable(context.getResources(), R.drawable.img_user, null)

しかし、最善の方法は、ドローアブルとカラーを取得するための共通のクラスを1つ作成する必要があります。将来、何かが変更または廃止される場合は、プロジェクトのすべての場所を変更する必要がないためです。このメソッドで変更するだけです。

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);

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.