У меня есть изображение res/drawable/test.png
(R.drawable.test).
Я хочу передать это изображение функции, которая принимает Drawable
, например mButton.setCompoundDrawables()
.
Итак, как я могу преобразовать ресурс изображения в Drawable
?
У меня есть изображение res/drawable/test.png
(R.drawable.test).
Я хочу передать это изображение функции, которая принимает Drawable
, например mButton.setCompoundDrawables()
.
Итак, как я могу преобразовать ресурс изображения в Drawable
?
Ответы:
Ваша активность должна иметь метод getResources. Делать:
Drawable myIcon = getResources().getDrawable( R.drawable.icon );
Этот код устарел:
Drawable drawable = getResources().getDrawable( R.drawable.icon );
Используйте это вместо:
Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.icon);
ResourcesCompat.getDrawable(getResources(), R.drawable.icon, null);
(где 3-й параметр является необязательным экземпляром Theme).
getDrawable (int id)
Метод амортизации по состоянию API 22.
Вместо этого вы должны использовать getDrawable (int id, Resources.Theme theme)
для API 21+
Код будет выглядеть примерно так.
Drawable myDrawable;
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
myDrawable = context.getResources().getDrawable(id, context.getTheme());
} else {
myDrawable = context.getResources().getDrawable(id);
}
getResources().getDrawable(R.drawable.ic_warning_80dp, context?.theme)
Я просто хотел бы добавить, что если вы получаете сообщение «устарело» при использовании getDrawable (...), вы должны использовать вместо этого следующий метод из библиотеки поддержки.
ContextCompat.getDrawable(getContext(),R.drawable.[name])
Вам не нужно использовать getResources () при использовании этого метода.
Это эквивалентно тому, чтобы делать что-то вроде
Drawable mDrawable;
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
mDrawable = ContextCompat.getDrawable(getContext(),R.drawable.[name]);
} else {
mDrawable = getResources().getDrawable(R.id.[name]);
}
Это работает как до, так и после версий Lollipop.
Получить Drawable из векторного ресурса, независимо от того, является ли он векторным или нет:
AppCompatResources.getDrawable(context, R.drawable.icon);
Примечание:
ContextCompat.getDrawable(context, R.drawable.icon);
произведем android.content.res.Resources$NotFoundException
для векторного ресурса.
Если вы пытаетесь получить отрисовку из вида, где изображение установлено как,
ivshowing.setBackgroundResource(R.drawable.one);
тогда drawable вернет только нулевое значение со следующим кодом ...
Drawable drawable = (Drawable) ivshowing.getDrawable();
Таким образом, лучше установить изображение с помощью следующего кода, если вы хотите получить чертеж из определенного вида.
ivshowing.setImageResource(R.drawable.one);
только тогда мы сможем точно преобразовать Drawable.
Если вы наследуете от фрагмента, вы можете сделать:
Drawable drawable = getActivity().getDrawable(R.drawable.icon)