Tengo muchas icono en la carpeta de dibujable y tengo su nombre como Cadena. ¿Cómo puedo acceder a la carpeta de dibujable y cambio de fondo de imageView (o cualquier punto de vista) el uso de estos nombres en forma dinámica. Gracias

OriginalEl autor Utku Soytaş | 2014-02-18

6 Comentarios

  1. 23

    Esto se puede hacer mediante la reflexión:

    String name = "your_drawable";
    final Field field = R.drawable.getField(name);
    int id = field.getInt(null);
    Drawable drawable = getResources().getDrawable(id);

    O el uso de Resources.getIdentifier():

    String name = "your_drawable";
    int id = getResources().getIdentifier(name, "drawable", getPackageName());
    Drawable drawable = getResources().getDrawable(id);

    A continuación, utilizar este para la configuración de la imagen en cualquiera de los casos:

    view.setBackground(drawable)
    Debo usar view.setBackground(drawable) o view.setBackgroundResource(id) o qué?
    He editado mi respuesta.
    Muchas gracias. Eso es trabajo 🙂 Todas las respuestas son correctas
    Me alegro de que podría ayudar. Yo upvoted la mayoría de las otras respuestas para compensar la acepte.
    Esto no funcionó para mí, pero he encontrado la solución aquí: stackoverflow.com/questions/13351003/find-drawable-by-string

    OriginalEl autor FD_

  2. 7
    int resId = getResources().getIdentifier("your_drawable_name","drawable",YourActivity.this.getPackageName());
    Drawable d = YourActivity.this.getResources().getDrawable(resId);
    Gracias. Esta respuesta es correcta también

    OriginalEl autor M. Bongini

  3. 5

    Se puede hacer de la siguiente manera:

    ImageView imageView = new ImageView(this);
    imageView.setBackground(getResources().getDrawable(getResources().getIdentifier("name","id",getPackageName())));
    Gracias. Esta respuesta es correcta también

    OriginalEl autor nikis

  4. 3

    Intente esto:

    public Bitmap getPic (int number)
    {
        return
            BitmapFactory.decodeResource
            (
                getResources(), getResourceID("myImage_" + number, "drawable", getApplicationContext())
            );
    }
    
    protected final static int getResourceID
    (final String resName, final String resType, final Context ctx)
    {
        final int ResourceID =
            ctx.getResources().getIdentifier(resName, resType,
                ctx.getApplicationInfo().packageName);
        if (ResourceID == 0)
        {
            throw new IllegalArgumentException
            (
                "No resource string found with name " + resName
            );
        }
        else
        {
            return ResourceID;
        }
    }
    Gracias. Estoy seguro de que es cierto, pero yo no probarlo 🙂

    OriginalEl autor Fantômas

  5. 1

    si usted tiene el nombre de archivo como una cadena de texto que puede utilizar:

    int id = getResources().getIdentifier("name_of_resource", "id", getPackageName());

    con este id puede acceder a ella como siempre (que se supone es un dibujable):

    Drawable drawable = getResources().getDrawable(id);
    id no funciona en este caso.
    Gracias. Esta respuesta es correcta

    OriginalEl autor stamanuel

  6. 0

    caso de uso si no en cualquier actividad, con @FD_ ejemplos

    Nota:

    si no en cualquier tipo de actividad para enviar contexto param con el fin de utilizar «getResources()» o «getPackageName()», y «getDrawable(id)» está en desuso, uso getDrawer(int id, Tema tema) en su lugar. (El tema puede ser null):

    String name = "your_drawable";
    int id = context.getResources().getIdentifier(name, "drawable", 
    context.getPackageName());
    Drawable drawable = context.getResources().getDrawable(id, null);

    OriginalEl autor juan fernandez

Dejar respuesta

Please enter your comment!
Please enter your name here