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



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



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

610   10  

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)

см. docs

Comments

    Ничего не найдено.