Con el nuevo Android API 22 getResources().getDrawable()
ahora está en desuso. Ahora el mejor enfoque es usar solo getDrawable()
.
¿Qué cambió?
Resources#getDrawable(int)
y en Resources#getColor(int)
desuso.
Con el nuevo Android API 22 getResources().getDrawable()
ahora está en desuso. Ahora el mejor enfoque es usar solo getDrawable()
.
¿Qué cambió?
Resources#getDrawable(int)
y en Resources#getColor(int)
desuso.
Respuestas:
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 de 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: noResourcesCompat.getDrawable()
está en desuso!
EXTRA) dibujables con atributos de tema de otro tema
ResourcesCompat.getDrawable(getResources(), R.drawable.name, anotherTheme);
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 obtener un objeto dibujable asociado con un ID de recurso particular para la densidad / tema de pantalla dada. Llamar al getDrawable(int)
método en desuso es equivalente a llamar getDrawable(int, null)
.
getDrawable (int id)
método de la Context
clase. Esto es lo mismo getResources().getDrawable(id, getTheme());
y también usa la nueva API.
getDrawable(int, Resources.Theme)
.
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
está el contexto)
para más detalles siga este enlace: ContextCompat
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));
}
Build.VERSION_CODES.LOLLIPOP is API 21
Entonces, ¿no debería ser esto if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1)
o if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP)
? No importa. Desde abajo "El método se agregó en la API 21 pero no se desactivó hasta la API 22. :)"
Puedes usar
ContextCompat.getDrawable(getApplicationContext(),R.drawable.example);
eso es trabajo para mi
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)));
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));
}
}
Si está apuntando a SDK> 21 (lollipop o 5.0) use
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:
getDrawable(int id, Resources.Theme theme)
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.
en api nivel 14
marker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.miubicacion, null));
Para algunos que todavía tienen que resolver este problema incluso después de aplicar la sugerencia de este hilo (solía ser uno como ese), agregue esta línea en su clase de Aplicación, método onCreate ()
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
Como se sugiere aquí y aquí, a veces esto es necesario para acceder a los vectores de los recursos, especialmente cuando se trata de elementos de menú, etc.
En Kotlin puedes usar extensión
fun Context.getMyDrawable(id : Int) : Drawable?{
return ContextCompat.getDrawable(this, id)
}
luego usar como
context.getMyDrawable(R.drawable.my_icon)
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);
}
BuildVersionCodes
una clase específica de Xamarin?
getDrawable (int id)
de la claseResources
está en desuso. Ahora debe usar el métodogetDrawable (int id, Resources.Theme theme)
con el nuevo parámetro de tema.