10 ответов:
у вас есть несколько вариантов, чтобы справиться с этим прекращение права (и будущее) способ, в зависимости от того, какой вид drawable вы загружаете:
A) drawables С атрибуты тема
ContextCompat.getDrawable(getActivity(), R.drawable.name);вы получите стилизованный Drawable, как ваша тема деятельности инструктирует. Это, наверное, то, что вам нужно.
б) drawables без тема атрибуты
ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);вы получите ваш unstyled drawable по-старому. Пожалуйста, обратите внимание:
ResourcesCompat.getDrawable()- это не устарел!
дополнительно) drawables С атрибуты темы от другое тема
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)EDIT
ResourcesCompatтакже устарел в настоящее время. Но вы можете использовать это:
ContextCompat.getDrawable(this, R.drawable.your_drawable)(здесьthisконтекст)для более подробной информации перейдите по этой ссылке: ContextCompat
getResources().getDrawable()был устаревшим в API уровня 22. Теперь мы должны добавить тему:getDrawable (int id, Resources.Тема тема) (добавлено в API level 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));
построить.VERSION_CODES.Чупа-чупс теперь должны быть изменены, чтобы 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)
Comments