Android: альтернатива context.getDrawable ()


87

В context.getDrawable()своем проекте я использовал вот что:

Drawable greenProgressbar = context.getDrawable(R.drawable.custom_progressbargreen);

Но Eclipse выдает ошибку, требующую Minimum API level of 21. Это будет означать, что после быстрого поиска в Google мое приложение можно будет использовать только Android 5.0. Поскольку не все устройства используют эту версию Android, я хотел бы иметь альтернативу context.getDrawable().

Ответы:


203

Ранее принятый метод объявлен устаревшим согласно документации SDK 22:

До android.os.Build.VERSION_CODES # JELLY_BEAN эта функция не могла правильно получать окончательную плотность конфигурации, если переданный здесь идентификатор ресурса является псевдонимом для другого ресурса Drawable. Это означает, что если конфигурация плотности ресурса псевдонима отличается от фактического ресурса, плотность возвращаемого Drawable будет неправильной, что приведет к плохому масштабированию.

Как указано в этом ответе, лучшим решением было бы использовать ContextCompat : ContextCompat.getDrawable(context, R.drawable.***)


1
Я принял этот ответ сейчас, так как он более актуален :)
Брэм

26

Попробуйте добавить getResources()после контекста, так что это:

Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen);

должно сработать.


4
Resources.getDrawable устарел в пользу Context.getDrawable
Джо Баубир,

12

У меня была такая же ситуация, когда я хотел сослаться на метод getDrawable (), который теперь устарел.

что я использовал,

myButton.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.ic_btn_off));

Надеюсь, что это поможет вам


9

Раньше у меня была похожая проблема. Вы пробовали сделать это вот так?

Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen);

Это устарело.
Таслим Осени


1

Вы должны использовать getDrawable (id, this.getTheme ()). Этот метод до сих пор не считается устаревшим.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    view.setBackground(getResources().getDrawable(R.drawable.radioline,this.getTheme()));
} else {
   view.setBackground(getResources().getDrawable(R.drawable.radioline));
}


1

Вы также можете установить ресурс напрямую, не работая с drawable (Kotlin):

btn.setImageResource(R.drawable.ic_XXX)

1

Решение для Kotlin-программистов выглядит так:

val greenProgressbar = context!!.getDrawable(R.drawable.custom_progressbargreen)

или (из API 22)

val greenProgressbar = ContextCompat.getDrawable(R.drawable.custom_progressbargreen)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.