Android getResources (). GetDrawable () устаревший API 22

С новым API android API 22 getResources().getDrawable() теперь устарел. Теперь лучший подход – использовать только getDrawable() .

Какие изменения?

Solutions Collecting From Web of "Android getResources (). GetDrawable () устаревший API 22"

У вас есть некоторые опции, позволяющие справиться с этим устареванием в правильном (и будущем ) способе, в зависимости от того, какой тип выгружаемого вы загружаете:


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)); } } 

Теперь 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); }