У мене є зображення res/drawable/test.png
(R.dravable.test).
Я хочу передати це зображення функції, яка приймає Drawable
, наприклад mButton.setCompoundDrawables()
.
Тож як я можу перетворити ресурс зображення в формат Drawable
?
У мене є зображення res/drawable/test.png
(R.dravable.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-й парам - необов'язковий екземпляр теми).
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)
Я просто хотів би додати, що якщо ви отримуєте "застаріле" повідомлення під час використання getDravable (...), замість цього слід використовувати наступний метод із бібліотеки підтримки.
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 версій.
Отримайте Dravable з векторного ресурсу незалежно від того, є його вектор чи ні:
AppCompatResources.getDrawable(context, R.drawable.icon);
Примітка:
ContextCompat.getDrawable(context, R.drawable.icon);
буде вироблятися android.content.res.Resources$NotFoundException
для векторного ресурсу.
Якщо ви намагаєтеся отримати зображення, що відображається, з виду, де зображення встановлено як,
ivshowing.setBackgroundResource(R.drawable.one);
тоді Dravable поверне лише нульове значення із наступним кодом ...
Drawable drawable = (Drawable) ivshowing.getDrawable();
Отже, краще встановити зображення за допомогою наступного коду, якщо ви хочете отримати малюнок з певного виду.
ivshowing.setImageResource(R.drawable.one);
тільки тоді ми будемо точно конвертувати те, що можна отримати.
Якщо ви успадковуєте фрагмент, ви можете зробити:
Drawable drawable = getActivity().getDrawable(R.drawable.icon)