Con el nuevo android API 22 getResources().getDrawable() está ahora en desuso.
Ahora, el mejor enfoque es utilizar sólo getDrawable().

Lo que ha cambiado?

  • Podría usted especificar tu pregunta? Es cierto que el método getDrawable (int id) de la clase Resources está en desuso. Ahora deberá utilizar el método getDrawable (int id, Resources.Theme theme) con el tema nuevo parámetro.
  • ContextCompat.getDrawable(contexto, R. de color.color_name)
  • Usted puede comprobar fuera de mi blog sobre este tema para una explicación más detallada acerca de por qué tanto Resources#getDrawable(int) y Resources#getColor(int) están en desuso.
  • Google debería poner soluciones rápidas para cada obsoleta de la función. Hice un post sobre esto aquí: code.google.com/p/android/issues/detail?id=219495
InformationsquelleAutor Blodhgard | 2015-03-13

11 Comentarios

  1. 918

    Usted tiene algunas opciones para manejar esta en desuso el derecho (y a prueba de futuro) manera, dependiendo del tipo de imagen que carga:


    A) dibujables con tema de los atributos

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

    Usted va a obtener un estilo de Dibujable como su tema de la Actividad instruye.
    Esto es probablemente lo que usted necesita.


    B) dibujables sin tema de los atributos

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

    Tendrás tu sin estilo dibujable de la manera antigua. Por favor nota: ResourcesCompat.getDrawable() es no obsoleto!


    EXTRA) dibujables con tema de los atributos de otro tema

    ResourcesCompat.getDrawable(getResources(), R.drawable.name, anotherTheme);
    • Sólo la respuesta perfecta. Greatttt….
    • Mi aplicación se bloquea el uso de la sugestión B. no como la llamada Dibujable originalIcon = ResourcesCompat.getDrawable(ctxt.getResources(), iconResId, null);
    • Declaro así: public static void setImageButtonEnabled(Contexto ctxt, booleano habilitado, ImageButton elemento, int iconResId) { elemento.setEnabled(habilitado); Dibujable originalIcon = ResourcesCompat.getDrawable(ctxt.getResources(), iconResId, null); Dibujable icono = activado ? originalIcon : convertDrawableToGrayScale(originalIcon); item.setImageDrawable(icono); } y la llamada de esta manera: Utilidad.setImageButtonEnabled(getContext(), false, la espalda, R. dibujable.arrow_left);
    • Más precisamente, el choque que parece estar sucediendo porque mi icono es un Vector de la imagen.
    • xamarin versión: ResourcesCompat.GetDrawable(Recursos, Recursos.Dibujable.nombre, null);
    • Puedo añadir una palabra más a usted,ContextCompat.getColor(contexto,color) también puede ayudar…

  2. 734

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


    Se debe usar el siguiente código de la biblioteca de compatibilidad lugar:

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

    El uso de este método es equivalente a la llamada:

    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 de 21, usted debe utilizar el getDrawable(int, Theme) método en lugar de getDrawable(int), ya que permite la obtención de un objeto desplegable asociado con un determinado ID de recurso para la densidad de pantalla/tema. Llamar a la obsoleta getDrawable(int) método es equivalente a la llamada getDrawable(int, null).

    • Creo que el OP se refiere también a la getDrawable (int id) método de la Context clase. Este es el mismo como getResources().getDrawable(id, getTheme()); y también utiliza la nueva API.
    • De acuerdo a la documentación, min nivel de API 21 se requiere la utilización de getDrawable(int, Resources.Theme).
    • El método fue añadido en la API de 21, pero no estaba en desuso hasta la API de 22. 🙂
    • Esto sólo se suma en las líneas a mi código. Lleno de odio!
    • Android doc también se recomienda el uso de Contexto::getDrawable(int) método, pero desde que se introdujo en la API de 21 parece que ContextCompat es la mejor opción.
    • Esta respuesta no trabajar .archivos svg, en versiones anteriores a la versión de la API de 21. Hay un error en la biblioteca.
    • La sugerencia de error cuando se llama desde un Fragmento: Dibujable originalIcon = ContextCompat.getDrawable(getContext(), R. dibujable.arrow_left);

  3. 140

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

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

    EDITAR

    ResourcesCompat también es obsoleto ahora. Pero usted puede usar este:

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

    para más detalles, siga este enlace: ContextCompat

  4. 27

    getResources().getDrawable() ya no se utiliza en la API de nivel 22. Ahora debemos añadir el tema:

    getDrawable (int id, Recursos.Tema tema) (Añadido en la API de nivel 21)

    Este es un ejemplo:

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

    Este es un ejemplo de cómo validar para las 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));
    }
    • Esto sólo se suma en las líneas a mi código. Lleno de odio!
    • Build.VERSION_CODES.LOLLIPOP is API 21, por lo que 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)? Nunca la mente. Desde abajo», El método fue añadido en la API de 21, pero no estaba en desuso hasta la API de 22. :)»
  5. 2

    Puede utilizar

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

    eso es trabajo para mí

    • Utilizando el contexto de aplicación de la carga vector de la imagen se bloquea en pre lollipop. Alguna solución para esto?
    • No recuerdo mi prueba para el código con lollipop caso, pero se puede tratar getActivity() o getResources() en lugar de eso, ¿ que va bien con el código ?
    • Estoy usando el patrón MVVM y necesito inflar dibujables dentro de ViewModels que no tienen actividad de contexto. Sólo en el contexto de aplicación. Eso es lo que mi problema es.
  6. 1

    Sólo un ejemplo de cómo he solucionado el problema de una matriz a de carga de 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)));
  7. 1

    Intente 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));
        }
    }
    • Por favor ayuda con este código por favor !
    • Mientras que este código puede responder a la pregunta, proporcionar contexto adicional acerca de por qué y/o cómo este código responde a la pregunta que mejora su valor de largo plazo.
  8. 0

    es a nivel de api 14

    marker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.miubicacion, null));
    • Usted debe proporcionar un poco más de contexto alrededor de su respuesta.
  9. 0

    Ahora es necesario implementar como este

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

    Siguiente línea de código es suficiente, todo va a cuidar por ContextCompat.getDrawable

    ContextCompat.getDrawable(this, R.drawable.your_drawable_file)
  10. -1

    Construir.VERSION_CODES.LOLLIPOP debería cambiarse a BuildVersionCodes.Lollipop
    yo.e:

    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);
    }
    • No BuildVersionCodes una clase específica para Xamarin?

Dejar respuesta

Please enter your comment!
Please enter your name here