it-swarm.com.ru

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

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

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

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

67
Bram

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

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

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

174
user2417480

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

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

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

23
glm9637

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

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

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

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

9
Umanda

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

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

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