openrawresource getresources getidentifier getdrawable getcolor android android-drawable android-resources android-5.1.1-lollipop

getidentifier - Android getResources(). GetDrawable() en desuso API 22



getresources() getidentifier (12)

Editar: vea mi publicación de blog sobre el tema para obtener 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) lugar de getDrawable(int) , ya que le permite obtener un objeto dibujable asociado con un ID de recurso particular para la densidad / tema de pantalla dada. Llamar al método getDrawable(int) desuso es equivalente a llamar a getDrawable(int, null) .

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

¿Qué cambió?


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

getDrawable (int id, Resources.Theme 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)); }


Ahora necesitas implementar así

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //>= API 21 // } else { // }

Seguir una sola línea de código es suficiente, ContextCompat.getDrawable se encargará de todo.

ContextCompat.getDrawable(this, R.drawable.your_drawable_file)


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


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


Puedes usar

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

eso es trabajo para mi


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) (Este es el contexto)

para más detalles siga este enlace: ContextCompat


Si está apuntando a SDK> 21 (lollipop o 5.0) use

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

Ver documentos


Solo un ejemplo de cómo solucioné el problema en una matriz para cargar una vista de lista, 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)));


Tiene algunas opciones para manejar este desuso de la manera correcta (y a prueba de futuro ), dependiendo del tipo de dibujo que esté cargando:

A) dibujables con atributos de tema

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

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

B) dibujables sin atributos de tema

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

Obtendrá su dibujable sin estilo a la antigua usanza. Tenga en cuenta: ResourcesCompat.getDrawable() no está en desuso.

EXTRA) dibujables con atributos de tema de otro tema

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


en api nivel 14

context.getDrawable(R.drawable.your_drawable_name)


getDrawable (int drawable) está en desuso en el nivel 22 de API. Para referencia, consulte este enlace .

Ahora para resolver este problema, tenemos que pasar un nuevo constructor junto con una identificación como la siguiente:

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

Para soluciones Haga esto: -

En Java: -

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

o

imgProfile.setImageDrawable(getResources().getDrawable(R.drawable.img_prof, getApplicationContext().getTheme()));

En Kotlin: -

rel_week.background=ContextCompat.getDrawable(this.requireContext(), R.color.colorWhite)

o

rel_day.background=resources.getDrawable(R.drawable.ic_home, context?.theme)

Espero que esto te ayude. Gracias.