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)

см. docs