Pregunta Android getResources (). GetDrawable () API obsoleta 22


Con la nueva API de Android 22 getResources().getDrawable() ahora está en desuso Ahora el mejor enfoque es usar solo getDrawable().

¿Qué cambio?


568
2018-03-13 20:05


origen


Respuestas:


Usted tiene algunas opciones para manejar esta deprecación a la derecha (y prueba del futuro) forma, dependiendo de qué tipo de drawable estés cargando:


UN) drawables con atributos del tema

ContextCompat.getDrawable(getActivity(), R.drawable.name);

Obtendrá un Drawable con estilo según lo indique su tema Activity. Esto es probablemente lo que necesitas.


SEGUNDO) drawables sin atributos del tema

ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);

Obtendrá su dibujo sin estilo a la vieja usanza. Tenga en cuenta: ResourcesCompat.getDrawable() es no ¡obsoleto!


EXTRA) drawables con atributos del tema de otro tema

ResourcesCompat.getDrawable(getResources(), R.drawable.name, anotherTheme);

797
2018-03-19 14:13



Editar: ver mi publicación en el blog sobre el tema para una explicación más completa


En su lugar, debe usar el siguiente código de la biblioteca de soporte:

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

Usar este método es equivalente a llamar:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    return resources.getDrawable(id, context.getTheme());
} else {
    return resources.getDrawable(id);
}

A partir de API 21, debe usar el getDrawable(int, Theme) método en lugar de getDrawable(int), ya que le permite buscar un objeto dibujable asociado con un ID de recurso particular para la densidad / tema de pantalla dada. Llamando al obsoleto getDrawable(int) método es equivalente a llamar getDrawable(int, null).


711
2018-03-13 20:32



Reemplace esta línea:      getResources().getDrawable(R.drawable.your_drawable)

con ResourcesCompat.getDrawable(getResources(), R.drawable.your_drawable, null)

EDITAR

ResourcesCompat también está en desuso ahora. Pero puedes usar esto:

ContextCompat.getDrawable(this, R.drawable.your_drawable) (Aquí this es el contexto)

para más detalles siga este enlace: ContextCompat


136
2018-03-18 08:32



getResources().getDrawable() se desaprobó en el nivel de API 22. Ahora debemos agregar el tema:

getDrawable (int id, tema Resources.Theme)  (Agregado en API nivel 21)

Esto es un ejemplo:

myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage, getApplicationContext().getTheme()));

Este es un ejemplo de cómo validar para versiones posteriores:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //>= API 21
     myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage, getApplicationContext().getTheme()));
   } else { 
     myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage));
}

25
2017-09-29 21:25



Puedes usar

ContextCompat.getDrawable(getApplicationContext(),R.drawable.example);

eso es trabajo para mi


2
2017-12-26 04:36



Solo un ejemplo de cómo arreglé el problema en una matriz para cargar un ListView, espero que ayude.

 mItems = new ArrayList<ListViewItem>();
//    Resources resources = getResources();

//    mItems.add(new ListViewItem(resources.getDrawable(R.drawable.az_lgo), getString(R.string.st_az), getString(R.string.all_nums)));
//    mItems.add(new ListViewItem(resources.getDrawable(R.drawable.ca_lgo), getString(R.string.st_ca), getString(R.string.all_nums)));
//    mItems.add(new ListViewItem(resources.getDrawable(R.drawable.co_lgo), getString(R.string.st_co), getString(R.string.all_nums)));
    mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.az_lgo, null), getString(R.string.st_az), getString(R.string.all_nums)));
    mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.ca_lgo, null), getString(R.string.st_ca), getString(R.string.all_nums)));
    mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.co_lgo, null), getString(R.string.st_co), getString(R.string.all_nums)));

1
2018-01-12 17:40



Prueba esto:

public static List<ProductActivity> getCatalog(Resources res){
    if(catalog == null) {
        catalog.add(new Product("Dead or Alive", res
                .getDrawable(R.drawable.product_salmon),
                "Dead or Alive by Tom Clancy with Grant Blackwood", 29.99));
        catalog.add(new Product("Switch", res
                .getDrawable(R.drawable.switchbook),
                "Switch by Chip Heath and Dan Heath", 24.99));
        catalog.add(new Product("Watchmen", res
                .getDrawable(R.drawable.watchmen),
                "Watchmen by Alan Moore and Dave Gibbons", 14.99));
    }
}

1
2018-02-09 14:47



en api nivel 14

marker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.miubicacion, null));

0
2018-01-20 16:46



Build.VERSION_CODES.LOLLIPOP ahora debería cambiarse a BuildVersionCodes.Lollipop es decir:

if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) {
    this.Control.Background = this.Resources.GetDrawable(Resource.Drawable.AddBorder, Context.Theme);
} else {
    this.Control.Background = this.Resources.GetDrawable(Resource.Drawable.AddBorder);
}

0
2017-12-02 01:06