Gostaria de armazenar o ID dos recursos desenháveis na forma de R.drawable.*
dentro de uma matriz usando um arquivo de valores XML e, em seguida, recuperar a matriz na minha atividade.
Alguma idéia de como conseguir isso?
Gostaria de armazenar o ID dos recursos desenháveis na forma de R.drawable.*
dentro de uma matriz usando um arquivo de valores XML e, em seguida, recuperar a matriz na minha atividade.
Alguma idéia de como conseguir isso?
Respostas:
Você usa uma matriz digitada no arrays.xml
arquivo dentro da sua /res/values
pasta com a seguinte aparência:
<?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>
Em sua atividade, acesse-os da seguinte maneira:
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();
Na value
pasta create xml
file name, arrays.xml
adicione os dados dessa maneira
<integer-array name="your_array_name">
<item>@drawable/1</item>
<item>@drawable/2</item>
<item>@drawable/3</item>
<item>@drawable/4</item>
</integer-array>
Em seguida, obtenha-o no seu código dessa maneira
private TypedArray img;
img = getResources().obtainTypedArray(R.array.your_array_name);
Em seguida, use um Drawable
desses noimg
TypedArray
exemplos, por exemplo, ImageView
background
use o código a seguir
ImageView.setBackgroundResource(img.getResourceId(index, defaultValue));
onde index
está o Drawable
índice
defaultValue
é um valor que você atribui se não houver nenhum itemindex
Para obter mais informações sobre, TypedArray
visite este link
http://developer.android.com/reference/android/content/res/TypedArray.html
Você pode usar isso para criar uma variedade de outros recursos, como drawables. Observe que não é necessário que a matriz seja homogênea, portanto, você pode criar uma matriz de tipos de recursos mistos, mas deve estar ciente de quais e onde os tipos de dados estão na 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>
E obtenha os recursos em sua atividade como este
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);
Aproveitar!!!!!
Kotlin maneira poderia 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)
}
No Kotlin, você pode fazer o seguinte: -
<integer-array name="drawer_icons">
<item>@drawable/drawer_home</item>
</integer-array>
Você obterá uma matriz de imagem do recurso como TypedArray
val imageArray = resources.obtainTypedArray(R.array.drawer_icons)
obter ID do recurso pelo índice
imageArray.getResourceId(imageArray.getIndex(0),-1)
OU você pode definir o recurso do imageView como o id
imageView.setImageResource(imageArray.getResourceId(imageArray.getIndex(0),-1))
e finalmente reciclar a matriz
imageArray.recycle()
Você não pode armazenar matrizes em R..drawable até onde eu sei.
O que você pode fazer é criar uma matriz em config.xml ou strings.xml que mapeie um caminho para um recurso desenhável usando um recurso de alias .
Veja se isso funciona e entre em contato se precisar de ajuda adicional.