Ответ 1
Drawable d = getResources().getDrawable(android.R.drawable.ic_dialog_email);
ImageView image = (ImageView)findViewById(R.id.image);
image.setImageDrawable(d);
Мне нужно получить объект Drawable для отображения на кнопке изображения. Есть ли способ использовать код ниже (или что-то вроде этого), чтобы получить объект из пакета android.R.drawable. *?
например, если drawableId был android.R.drawable.ic_delete
mContext.getResources().getDrawable(drawableId)
Drawable d = getResources().getDrawable(android.R.drawable.ic_dialog_email);
ImageView image = (ImageView)findViewById(R.id.image);
image.setImageDrawable(d);
Как и в 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);
}
По API 21 вы также можете использовать:
ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);
Вместо ContextCompat.getDrawable(context, android.R.drawable.ic_dialog_email)
Лучший способ -
button.setBackgroundResource(android.R.drawable.ic_delete);
ИЛИ для Drawable left и чего-то подобного для правильного и т.д.
int imgResource = R.drawable.left_img;
button.setCompoundDrawablesWithIntrinsicBounds(imgResource, 0, 0, 0);
и
getResources().getDrawable()
теперь устарел