Android: alternativa para context.getDrawable ()

84

Lo he usado context.getDrawable()así en mi proyecto:

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

Pero Eclipse me está dando un error que necesita un Minimum API level of 21. Esto significaría que después de una búsqueda rápida en Google, mi APLICACIÓN solo se podrá utilizar Android 5.0. Dado que no todos los dispositivos utilizan esta versión de Android, me gustaría tener una alternativa context.getDrawable().

Bram
fuente

Respuestas:

201

El método aceptado anteriormente ha quedado obsoleto, según la documentación del SDK 22:

Antes de android.os.Build.VERSION_CODES # JELLY_BEAN, esta función no recuperaba correctamente la densidad de configuración final cuando el ID de recurso pasado aquí es un alias a otro recurso Drawable. Esto significa que si la configuración de densidad del recurso de alias es diferente del recurso real, la densidad del Drawable devuelto sería incorrecta, lo que resultaría en un escalado incorrecto.

Como se señaló en esta respuesta, una mejor solución sería usar ContextCompat : ContextCompat.getDrawable(context, R.drawable.***)

usuario2417480
fuente
1
Acepté esta respuesta ahora porque es más relevante :)
Bram
26

Intente agregar un getResources()después del contexto, entonces esto:

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

Deberia trabajar.

glm9637
fuente
4
Resources.getDrawable quedó obsoleto en favor de Context.getDrawable
Joe Bowbeer
12

Tuve la misma situación en la que quería hacer referencia al método getDrawable () que ahora está en desuso.

lo que usé,

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

Espero que esto te ayudará

Umanda
fuente
9

Tuve un problema similar antes. ¿Has intentado hacerlo así?

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

fuente
Esto está desaprobado.
Taslim Oseni
2

Prueba esto:

AppCompatResources.getDrawable(context, R.drawable.*)
Nando
fuente
1

Debe utilizar "getDrawable (id, this.getTheme ())". Este método no está obsoleto hasta ahora.

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));
}
Maulik Baraiya
fuente
1

Acepto usar ContextCompact.getDrawable (Context context, int resID). Funcionó para mí y mi aplicación apunta a API 19.

Kaylen Travis Pillay
fuente
1

También puede configurar el recurso directamente sin trabajar con el dibujable (Kotlin):

btn.setImageResource(R.drawable.ic_XXX)
Lukas Mohs
fuente
1

La solución para programadores de Kotlin se ve así:

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

o (de API 22)

val greenProgressbar = ContextCompat.getDrawable(R.drawable.custom_progressbargreen)
Jens van de Mötter
fuente