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


84

Я використав ось context.getDrawable()так у своєму проекті:

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

Але Eclipse видає мені помилку, яка йому потрібна Minimum API level of 21. Це означало б, що після швидкого пошуку в Google мій додаток буде доступним лише для Android 5.0. Оскільки не всі пристрої використовують цю версію android, я хотів би мати альтернативу для context.getDrawable().

Відповіді:


201

Раніше прийнятий метод був застарілим, згідно з документацією SDK 22:

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

Як зазначено у цій відповіді, кращим рішенням буде використання ContextCompat : ContextCompat.getDrawable(context, R.drawable.***)


1
Я прийняв цю відповідь зараз, оскільки вона більш актуальна :)
Брем

26

Спробуйте додати a 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

Я погоджуюсь використовувати ContextCompact.getDrawable (контекст контексту, int resID). Це спрацювало для мене, і моя програма націлена на API 19.


1

Ви також можете встановити ресурс безпосередньо, не працюючи з графічним (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.