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