Android getResources().getDrawable () устаревший API 22
С новым Android API 22 getResources().getDrawable()
теперь устарел.
Теперь лучший подход-использовать только getDrawable()
.
какие изменения?
10 ответов
у вас есть несколько вариантов для обработки этого устаревания справа (и будущее) способ, в зависимости от того, какой вид drawable вы загружаете:
A) drawables С атрибуты тема
ContextCompat.getDrawable(getActivity(), R.drawable.name);
вы получите стиль Drawable как ваша тема деятельности инструктирует. Это, наверное, то, что тебе нужно.
B) drawables без тема атрибуты
ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);
вы получите свой unstyled drawable по-старому. Обратите внимание: ResourcesCompat.getDrawable()
is не устарел!
EXTRA) drawables С атрибуты темы из другое тема
ResourcesCompat.getDrawable(getResources(), R.drawable.name, anotherTheme);
Edit: см. мой блог на эту тему для более полного объяснения
вместо этого следует использовать следующий код из библиотеки поддержки:
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, ресурсы.Тема тема) (добавлено в 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 Уровень 14
marker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.miubicacion, null));
построить.VERSION_CODES.LOLLIPOP теперь должен быть изменен на BuildVersionCodes.Леденец я.е:
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);
}
Если вы нацелены на SDK > 21 (lollipop или 5.0), используйте
context.getDrawable(R.drawable.your_drawable_name)