Me gustaría tienda dibujable recursos’ ID en el formulario de R.drawable.* dentro de una matriz utilizando un XML archivo de valores y, a continuación, recuperar la matriz en mi actividad.

Alguna idea de como lograr esto?

  • ¿Puede aclarar lo que significa «dentro de una matriz mediante el uso de XML»?
  • un archivo de valores. por ejemplo, strings.xml
  • No entiendo por qué se quiere hacer esto. Podría dar un poco más a fondo acerca de por qué quieres hacerlo de esta manera?
  • Suena como que usted está tratando de hacer algo mucho más complicado de lo necesario.
  • Lo que estoy tratando de hacer es almacenar el id de imágenes que se mostrarán en un listview.
InformationsquelleAutor gammaraptor | 2011-08-04

5 Comentarios

  1. 344

    Utiliza un conjunto de tipos en arrays.xml archivo dentro de la /res/values carpeta que se parece a esto:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
        <integer-array name="random_imgs">
            <item>@drawable/car_01</item>
            <item>@drawable/balloon_random_02</item>
            <item>@drawable/dog_03</item>
        </integer-array>
    
    </resources>

    A continuación, en su actividad, para acceder a ellos así:

    TypedArray imgs = getResources().obtainTypedArray(R.array.random_imgs);
    
    //get resource ID by index
    imgs.getResourceId(i, -1)
    
    //or set you ImageView's resource to the id
    mImgView1.setImageResource(imgs.getResourceId(i, -1));
    
    //recycle the array
    imgs.recycle();
    • Muchas gracias. He adaptado el código, y ahora funciona. Muchas gracias.
    • Hey puede explicar cuál es el -1 en imgs.getResourceId(i,-1) representa?
    • defValue – Valor que se devolverá si el atributo no está definido o no un recurso. Estoy bastante seguro de que va a establecer el imageview en blanco si no tiene que usar el valor predeterminado es -1. developer.android.com/reference/android/content/res/…, int)
    • Recomendación: Después de que el usuario «imgs» agregar la siguiente línea: imgs.papelera();
    • Para nadie atascado en donde exactamente a poner esto arrays.xml el archivo, me lo puso en res/values y funcionaban las cosas. También he tenido que cambiarle el nombre a array.xml en lugar de matrices, por alguna razón.
    • Es «string-array» correcto? No debería ser sólo «matriz»?
    • developer.android.com/guide/topics/resources/…
    • Usted debe estar utilizando 0 en lugar de -1 para el id por defecto. -1 es un recurso válido de identificación, mientras que 0 es el recurso null.
    • fantástico! matrices son dulces.
    • El elemento correcto para un TypedArray es <array> no <string-array>.
    • awsm solución …
    • Usted da la real MVP patrick 🙂
    • representa el valor predeterminado si el índice es apresado con error <br / ><br / >getResourceId(int index, int defValue) <br / >***Recupera el identificador de recursos para el atributo en el índice.***
    • ¿Por qué tenemos que utilizar la papelera de al final?
    • El uso de la longitud() para obtener el recuento de elementos para un TypedArray.
    • De la OMI, el uso de un arrays.xml archivo oscurece el contenido. Yo personalmente agregar todos mis matrices de cadena en un regular strings.xml archivo mientras pongo mi matrices de enteros en la integer.xml archivo. En realidad, Android no importa cómo hacer que el nombre de todos estos archivos de recursos (incluso se podría mezclar las cadenas, los estilos, los enteros y todo en el mismo archivo), por lo que prefiere dejar claro lo que contienen.

  2. 30

    En el value carpeta crear xml nombre de archivo arrays.xml
    agregar los datos para que de esta manera

    <integer-array name="your_array_name">
        <item>@drawable/1</item>
        <item>@drawable/2</item>
        <item>@drawable/3</item>
        <item>@drawable/4</item>
    </integer-array>

    A continuación, obtener su código de esta manera

    private TypedArray img;
    img = getResources().obtainTypedArray(R.array.your_array_name);

    A continuación, utilizar un Drawable de estos en el img TypedArray por ejemplo, como un ImageView background utilice el siguiente código

    ImageView.setBackgroundResource(img.getResourceId(index, defaultValue));

    donde index es el Drawable índice.
    defaultValue es un valor que da si no hay ningún elemento en este index

    Para obtener más información acerca de TypedArray visitar este enlace
    http://developer.android.com/reference/android/content/res/TypedArray.html

  3. 14

    Puede utilizar para crear una variedad de otros recursos, tales como dibujables. Tenga en cuenta que la matriz no está obligado a ser homogénea, de modo que usted puede crear una matriz de mezcla de tipos de recursos, pero usted debe ser consciente de qué y donde los tipos de datos se encuentran en la matriz.

     <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <array name="icons">
            <item>@drawable/home</item>
            <item>@drawable/settings</item>
            <item>@drawable/logout</item>
        </array>
        <array name="colors">
            <item>#FFFF0000</item>
            <item>#FF00FF00</item>
            <item>#FF0000FF</item>
        </array>
    </resources>

    Y obtener los recursos en su actividad como esta

    Resources res = getResources();
    TypedArray icons = res.obtainTypedArray(R.array.icons);
    Drawable drawable = icons.getDrawable(0);
    
    TypedArray colors = res.obtainTypedArray(R.array.colors);
    int color = colors.getColor(0,0);

    Disfrutar!!!!!!

  4. 0

    kotlin manera podría ser esta:

    fun Int.resDrawableArray(context: Context, index: Int, block: (drawableResId: Int) -> Unit) {
      val array = context.resources.obtainTypedArray(this)
      block(array.getResourceId(index, -1))
      array.recycle()
    }
    
    R.array.random_imgs.resDrawableArray(context, 0) {
      mImgView1.setImageResource(it)
    }
  5. -2

    No se puede almacenar matrices en R. dibujable como lo que yo sé.

    Lo que puedes hacer es crear una matriz en config.xml o strings.xml que se asigna una ruta de acceso a un dibujable de recursos mediante el uso de un alias de recursos.

    Ver si esto funciona, y por favor, hágamelo saber si usted necesita cualquier ayuda adicional.

    • Abajo votado a favor de la incomprensión de la pregunta – no hay estatuto de limitaciones en esto me temo que…

Dejar respuesta

Please enter your comment!
Please enter your name here