Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android getResources (). GetDrawable () API obsoleto 22

Con el nuevo androide API 22 getResources().getDrawable() ahora está obsoleto. Ahora el mejor enfoque es usar sólo getDrawable() .

¿Qué cambio?

  • Colisión de claves de recursos de Android
  • ¿Cómo obtener una identificación de recurso con un nombre de recurso conocido?
  • Controlar la visibilidad de la vista desde un recurso
  • Cómo definir una matriz de enteros en un declarable-styleable?
  • No se pueden filtrar los activos para densidades múltiples mediante herramientas de compilación SDK 21 o posterior
  • Cambiar programaticamente el valor de un recurso de color obtenido de la respuesta de la API
  • No se puede resolver el atributo desde el espacio de nombres android
  • Almacenar datos estáticos en Android - recurso personalizado?
  • 8 Solutions collect form web for “Android getResources (). GetDrawable () API obsoleto 22”

    Usted tiene algunas opciones para manejar esta depreciación de la manera correcta (y la prueba futura ), dependiendo de qué tipo de dibujable que se está cargando:


    A) dibujables con atributos temáticos

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

    Obtendrás un estilo dibujable como tu tema de actividad te instruye. Esto es probablemente lo que usted necesita.


    B) dibujables sin atributos temáticos

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

    Usted conseguirá su unstyled drawable la vieja manera. Tenga en cuenta: ResourcesCompat.getDrawable() no está obsoleto!


    EXTRA) dibujables con atributos temáticos de otro tema

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

    Editar: vea mi post de blog sobre el tema para una explicación más completa


    Debe utilizar el siguiente código de la biblioteca de soporte:

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

    El uso de este método equivale a llamar a:

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

    A partir de la API 21, debe utilizar el getDrawable(int, Theme) 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 dado. Llamar al getDrawable(int) obsoleto getDrawable(int) equivale a llamar a getDrawable(int, null) .

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

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

    EDITAR

    ResourcesCompat también está obsoleto 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

    getResources().getDrawable() ha quedado obsoleto en el nivel de API 22. Ahora debemos añadir el tema:

    GetDrawable (id int, tema Resources.Theme) (Añadido en el nivel 21 de la API)

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

    Puedes usar

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

    Eso es trabajo para mi

    Sólo 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))); 

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

    Build.VERSION_CODES.LOLLIPOP ahora debe 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); } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.