2011-03-18 6 views
53

Tengo algunas imágenes en mi carpeta res/drawable. Digamos img1.png, img2.png y img3.png. Actualmente estoy creando una matriz de enteros de estos identificadores de imagen en Java como ésteCreación de una matriz entera de ID de recursos

int[] imgIds = {R.drawable.img1, R.drawable.img2, R.drawable.img3}; 

En cambio, es posible crear una matriz de enteros en una de res/values archivos (por ejemplo strings.xml) como esto

<integer-array name="img_id_arr"> 
    <item>@drawable/img1</item> 
    <item>@drawable/img2</item> 
    <item>@drawable/img3</item> 
</integer-array> 

y luego acceder a ella en Java a través del getResources().getIntArray(R.array.img_id_arr)?

Respuesta

60

Use simplemente "matriz" en lugar de "matriz entera". Consulte Typed Array en la guía del desarrollador.

+0

Eso funciona. Gracias. –

+0

Esto parece funcionar para dibujables pero no para estilos como por ejemplo: @android: Estilo/Temática @android: Estilo/Theme.Light @android: Estilo/Theme.Holo @android: estilo/Theme.Holo.Light ¿Cómo puede este trabajo para otros identificadores de recursos, aparte de dibujables? – toobsco42

+0

Creo que, hasta donde sé, es crear una matriz int que representa el valor precompilado en sí y no el valor que representa. si alguien tiene alguna idea, es bienvenido. – AlexSanchez

1

Haga un LevelListDrawable. Aunque no es exactamente lo que quieres, pero es bastante alcanzable.

+0

solución muy elegante y muy subestimado. – Tobias

44

Ver XML integer array, resource references, getIntArray

TypedArray ar = context.getResources().obtainTypedArray(R.array.my_array); 
int len = ar.length(); 
int[] resIds = new int[len]; 
for (int i = 0; i < len; i++) 
    resIds[i] = ar.getResourceId(i, 0); 
ar.recycle(); 
// Do stuff with resolved reference array, resIds[]... 
for (int i = 0; i < len; i++) 
    Log.v (TAG, "Res Id " + i + " is " + Integer.toHexString(resIds[i])); 
+0

¿es posible obtener una sola referencia a un recurso en lugar de una matriz? Lo necesito en caso de que quiera verificar si 2 identificadores de recursos son iguales. –

Cuestiones relacionadas