Me gustaría almacenar la identificación de los recursos extraíbles en forma de R.drawable.*
una matriz utilizando un archivo de valores XML y luego recuperar la matriz en mi actividad.
¿Alguna idea de cómo lograr esto?
Me gustaría almacenar la identificación de los recursos extraíbles en forma de R.drawable.*
una matriz utilizando un archivo de valores XML y luego recuperar la matriz en mi actividad.
¿Alguna idea de cómo lograr esto?
Respuestas:
Utiliza una matriz escrita en un arrays.xml
archivo dentro de su /res/values
carpeta que se ve así:
<?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>
Luego, en su actividad, acceda a ellos de la siguiente manera:
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();
En la value
carpeta crear xml
nombre de archivo, arrays.xml
agregue los datos 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>
Luego obténgalo en su código de esta manera
private TypedArray img;
img = getResources().obtainTypedArray(R.array.your_array_name);
Luego, para usar uno Drawable
de estos en, img
TypedArray
por ejemplo, como un ImageView
background
uso del siguiente código
ImageView.setBackgroundResource(img.getResourceId(index, defaultValue));
donde index
esta el Drawable
indice
defaultValue
es un valor que da si no hay ningún elemento en esteindex
Para obtener más información acerca de TypedArray
visitar este enlace
http://developer.android.com/reference/android/content/res/TypedArray.html
Puede usar esto para crear una variedad de otros recursos, como elementos extraíbles. Tenga en cuenta que no se requiere que la matriz sea homogénea, por lo que puede crear una matriz de tipos de recursos mixtos, pero debe saber qué y dónde están los tipos de datos 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 obtenga 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!!!!!
Kotlin Way podría ser esto:
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)
}
En Kotlin, puedes hacer lo siguiente:
<integer-array name="drawer_icons">
<item>@drawable/drawer_home</item>
</integer-array>
Obtendrá una matriz de imagen del recurso como TypedArray
val imageArray = resources.obtainTypedArray(R.array.drawer_icons)
obtener ID de recurso por el índice
imageArray.getResourceId(imageArray.getIndex(0),-1)
O puede configurar el recurso de imageView para la identificación
imageView.setImageResource(imageArray.getResourceId(imageArray.getIndex(0),-1))
y en último reciclar la matriz
imageArray.recycle()
No puedes almacenar matrices en R.drawable hasta donde yo sé.
Lo que puede hacer es crear una matriz en config.xml o strings.xml que asigne una ruta a un recurso dibujable utilizando un recurso de alias .
Vea si esto funciona y avíseme si necesita ayuda adicional.