Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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

Ответ 4

У меня была аналогичная проблема. Вы пытались сделать это так?

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

Ответ 5

Вы должны использовать "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));
}

Ответ 6

Я согласен с использованием ContextCompact.getDrawable(Context context, int resID). Это сработало для меня и моих приложений, ориентированных на API 19.

Ответ 7

Попробуйте следующее:

AppCompatResources.getDrawable(context, R.drawable.*)