69

I have some images in my res/drawable folder. Let's say img1.png, img2.png and img3.png. I am currently creating an integer array of these image IDs in Java like this

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

Instead, is it possible to create an integer array in one of res/values files (say strings.xml) like this

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

and then access it in Java via getResources().getIntArray(R.array.img_id_arr)?

4 Answers 4

70

Use just "array" instead of "integer-array". See Typed Array in the developer guide.

Sign up to request clarification or add additional context in comments.

2 Comments

This seems to work for drawables but not for styles for example: <array name="themes"> <item>@android:style/Theme</item> <item>@android:style/Theme.Light</item> <item>@android:style/Theme.Holo</item> <item>@android:style/Theme.Holo.Light</item> </array> How can this work for other resource ids aside from drawables?
I think, as far as i know, is create an int array representing the pre-compiled value itself and not the value what it represents. if someone has any idea it's welcome.
53

See 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]));

2 Comments

is it possible to obtain a single reference to a resource instead of an array? i need it in case i want to check if 2 resource ids are equal.
I guess we'll never know
2

Make a LevelListDrawable. Although it is not exactly what you want, but pretty much achievable.

1 Comment

Very elegant and very underrated solution.
0

I think it's best to keep them in code.

private static final int[] AVATARS = new int[]{
            R.drawable.ava_1, R.drawable.ava_2, R.drawable.ava_3...};

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.