С новым Android API 22 getResources().getDrawable()
теперь устарела.
Теперь лучшим подходом является использование только getDrawable()
.
Что изменилось?
С новым Android API 22 getResources().getDrawable()
теперь устарела.
Теперь лучшим подходом является использование только getDrawable()
.
Что изменилось?
У вас есть некоторые опции, позволяющие справиться с этим устареванием в правильном (и будущем доказательстве), в зависимости от того, какой тип выгружаемого вы загружаете:
A) чертежи с атрибутами темы
ContextCompat.getDrawable(getActivity(), R.drawable.name);
Вы получите стилизованный Drawable, как указано в разделе "Активность". Это, вероятно, то, что вам нужно.
B) чертежи без атрибутов темы
ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);
Вы получите свой неоригинальный доступный старый способ. Обратите внимание: ResourcesCompat.getDrawable()
не устарел!
EXTRA) рисунки с атрибутами темы из другой темы
ResourcesCompat.getDrawable(getResources(), R.drawable.name, anotherTheme);
Вместо этого вы должны использовать следующий код из библиотеки поддержки:
ContextCompat.getDrawable(context, R.drawable.***)
Использование этого метода эквивалентно вызову:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
return resources.getDrawable(id, context.getTheme());
} else {
return resources.getDrawable(id);
}
В соответствии с API 21 вы должны использовать метод getDrawable(int, Theme)
вместо getDrawable(int)
, так как он позволяет вам извлекать объект, связанный с определенным идентификатором ресурса для данной плотности экрана/темы. Вызов устаревшего метода getDrawable(int)
эквивалентен вызову getDrawable(int, null)
.
Заменить эту строку: getResources().getDrawable(R.drawable.your_drawable)
с ResourcesCompat.getDrawable(getResources(), R.drawable.your_drawable, null)
ИЗМЕНИТЬ
ResourcesCompat
также устарел. Но вы можете использовать это:
ContextCompat.getDrawable(this, R.drawable.your_drawable)
(Здесь this
- это контекст)
для более подробной информации перейдите по этой ссылке: ContextCompat
getResources().getDrawable()
устарел на уровне API 22. Теперь мы должны добавить тему:getDrawable (int id, Resources.Theme theme) (добавлен в уровень API 21)
Это пример:
myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage, getApplicationContext().getTheme()));
Это пример проверки для более поздних версий:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //>= API 21
myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage, getApplicationContext().getTheme()));
} else {
myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage));
}
Вы можете использовать
ContextCompat.getDrawable(getApplicationContext(),R.drawable.example);
которые работают для меня
Просто пример того, как я исправил проблему в массиве, чтобы загрузить listView, надеюсь, что это поможет.
mItems = new ArrayList<ListViewItem>();
// Resources resources = getResources();
// mItems.add(new ListViewItem(resources.getDrawable(R.drawable.az_lgo), getString(R.string.st_az), getString(R.string.all_nums)));
// mItems.add(new ListViewItem(resources.getDrawable(R.drawable.ca_lgo), getString(R.string.st_ca), getString(R.string.all_nums)));
// mItems.add(new ListViewItem(resources.getDrawable(R.drawable.co_lgo), getString(R.string.st_co), getString(R.string.all_nums)));
mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.az_lgo, null), getString(R.string.st_az), getString(R.string.all_nums)));
mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.ca_lgo, null), getString(R.string.st_ca), getString(R.string.all_nums)));
mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.co_lgo, null), getString(R.string.st_co), getString(R.string.all_nums)));
Попробуйте следующее:
public static List<ProductActivity> getCatalog(Resources res){
if(catalog == null) {
catalog.add(new Product("Dead or Alive", res
.getDrawable(R.drawable.product_salmon),
"Dead or Alive by Tom Clancy with Grant Blackwood", 29.99));
catalog.add(new Product("Switch", res
.getDrawable(R.drawable.switchbook),
"Switch by Chip Heath and Dan Heath", 24.99));
catalog.add(new Product("Watchmen", res
.getDrawable(R.drawable.watchmen),
"Watchmen by Alan Moore and Dave Gibbons", 14.99));
}
}
en api level 14
marker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.miubicacion, null));
Если вы нацеливаетесь на SDK> 21 (леденец или 5.0), используйте
context.getDrawable(R.drawable.your_drawable_name)
Теперь вам нужно реализовать так
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //>= API 21
//
} else {
//
}
Достаточно одной строки кода, все позаботится о ContextCompat.getDrawable
ContextCompat.getDrawable(this, R.drawable.your_drawable_file)
getDrawable (int drawable) устарело на уровне API 22. Для справки смотрите эту ссылку.
Теперь, чтобы решить эту проблему, мы должны передать новый конструктор вместе с идентификатором как: -
getDrawable(int id, Resources.Theme theme)
Для решений Сделайте так: -
В Java: -
ContextCompat.getDrawable(getActivity(), R.drawable.name);
или
imgProfile.setImageDrawable(getResources().getDrawable(R.drawable.img_prof, getApplicationContext().getTheme()));
В Котлине: -
rel_week.background=ContextCompat.getDrawable(this.requireContext(), R.color.colorWhite)
или
rel_day.background=resources.getDrawable(R.drawable.ic_home, context?.theme)
Надеюсь, это поможет вам. Спасибо.
Build.VERSION_CODES.LOLLIPOP теперь должен быть изменен на BuildVersionCodes.Lollipop то есть:
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) {
this.Control.Background = this.Resources.GetDrawable(Resource.Drawable.AddBorder, Context.Theme);
} else {
this.Control.Background = this.Resources.GetDrawable(Resource.Drawable.AddBorder);
}