2011-08-04 13 views
120

Chciałbym przechowywać ID zasobów rysunkowych w postaci R.drawable.* wewnątrz tablicy przy użyciu pliku wartości XML, a następnie pobrać tablicę w mojej działalności.Przechowywanie R.drawowalnych identyfikatorów w tablicy XML

Wszelkie pomysły, jak to osiągnąć?

+1

Czy możesz wyjaśnić, co to znaczy „wewnątrz tablicy przy użyciu XML”? –

+0

plik wartości. np. strings.xml – gammaraptor

+1

Nie rozumiem, dlaczego chciałbyś to zrobić. Czy możesz podać nieco więcej informacji o tym, dlaczego chcesz to zrobić w ten sposób? –

Odpowiedz

301

użyć pliku typed array w arrays.xml w folderze /res, który wygląda tak:

<?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> 

Następnie w swojej działalności, dostęp do nich tak:

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(); 
+1

Dziękuję bardzo. Zaadaptowałem kod, a teraz działa. Dziękuję Ci bardzo. – gammaraptor

+5

Hej, możesz wyjaśnić, co oznacza -1 w imgs.getResourceId (i, -1)? – Nishad

+0

defValue - Wartość do zwrócenia, jeśli atrybut nie jest zdefiniowany lub nie jest zasobem. Jestem prawie pewien, że ustawi widok obrazu na pusty, jeśli będzie musiał użyć wartości domyślnej -1. http://developer.android.com/reference/android/content/res/TypedArray.html#getResourceId(int, int) –

-1

Nie można przechowywać tablic w R.drawable, o ile wiem.

Co można zrobić, to utworzyć tablicę w pliku config.xml lub strings.xml, która odwzorowuje ścieżkę do zasobu losowego za pomocą alias resource.

Sprawdź, czy to działa, i daj mi znać, jeśli potrzebujesz dodatkowej pomocy.

+4

Głosowałem za nieporozumieniem na pytanie - nie ma ograniczeń co do tego, obawiam się ... –

12

Można to wykorzystać do tworzenia szereg innych zasobów, takich jak rysunki. Zauważ, że tablica nie musi być jednorodna, więc możesz utworzyć tablicę mieszanych typów zasobów, ale musisz mieć świadomość tego, co i gdzie znajdują się typy danych w tablicy.

<?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> 

i uzyskać zasoby w swojej działalności tak

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

Zapraszamy !!!!!

25

W stworzenia nazwy xml plików value folderu to arrays.xml dodać dane do niej w ten sposób

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

Następnie uzyskania go do kodu w ten sposób

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

Następnie użyć Drawable z nich w imgTypedArray na przykład jako ImageViewbackground użyj następującego kodu

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

gdzie index jest indeksem Drawable. defaultValue jest wartością dasz jeśli nie ma pozycja w tym index

Aby uzyskać więcej informacji o TypedArray wizyta ten link http://developer.android.com/reference/android/content/res/TypedArray.html

Powiązane problemy