Как вы получаете Drawable объект из идентификатора ресурса в пакете Android? - PullRequest
142 голосов
/ 19 октября 2011

Мне нужно получить объект Drawable для отображения на кнопке изображения.Есть ли способ использовать код ниже (или что-то подобное), чтобы получить объект из пакета android.R.drawable. * Package?

, например, если drawableId был android.R.drawable.ic_delete

mContext.getResources().getDrawable(drawableId)

Ответы [ 4 ]

203 голосов
/ 19 октября 2011
Drawable d = getResources().getDrawable(android.R.drawable.ic_dialog_email);
ImageView image = (ImageView)findViewById(R.id.image);
image.setImageDrawable(d);
99 голосов
/ 07 декабря 2015

Начиная с API 21 , вы должны использовать метод getDrawable(int, Theme) вместо getDrawable(int), поскольку он позволяет вам выбрать drawable объект, связанный с конкретным resource ID для данного screen density/theme. Вызов метода deprecated 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);
}
9 голосов
/ 06 февраля 2017

Начиная с API 21, вы также можете использовать:

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

Вместо ContextCompat.getDrawable(context, android.R.drawable.ic_dialog_email)

2 голосов
/ 13 мая 2016

лучший способ это

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

ИЛИ это для Drawable слева и что-то подобное для правой и т. Д.

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

и

getResources().getDrawable() устарела

...