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().

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.***)


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.


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á


9

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

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

Esto está desaprobado.
Taslim Oseni

2

Prueba esto:

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

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));
}

1

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


1

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

btn.setImageResource(R.drawable.ic_XXX)

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)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.