Ich möchte die ID der zeichnbaren Ressourcen in Form R.drawable.*
eines Arrays mithilfe einer XML- Wertedatei speichern und dann das Array in meiner Aktivität abrufen.
Irgendwelche Ideen, wie dies erreicht werden kann?
Ich möchte die ID der zeichnbaren Ressourcen in Form R.drawable.*
eines Arrays mithilfe einer XML- Wertedatei speichern und dann das Array in meiner Aktivität abrufen.
Irgendwelche Ideen, wie dies erreicht werden kann?
Antworten:
Sie verwenden ein typisiertes Array in einer arrays.xml
Datei in Ihrem /res/values
Ordner, das folgendermaßen aussieht:
<?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>
Greifen Sie dann in Ihrer Aktivität wie folgt darauf zu:
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();
Im value
Ordner create xml
file name arrays.xml
werden die Daten auf diese Weise hinzugefügt
<integer-array name="your_array_name">
<item>@drawable/1</item>
<item>@drawable/2</item>
<item>@drawable/3</item>
<item>@drawable/4</item>
</integer-array>
Dann erhalten Sie es auf diese Weise zu Ihrem Code
private TypedArray img;
img = getResources().obtainTypedArray(R.array.your_array_name);
Um dann eine Drawable
davon im img
TypedArray
Beispiel zu ImageView
background
verwenden, verwenden Sie den folgenden Code
ImageView.setBackgroundResource(img.getResourceId(index, defaultValue));
Wo index
ist der Drawable
Index?
defaultValue
ist ein Wert, den Sie angeben, wenn es keinen Artikel gibtindex
Weitere Informationen finden TypedArray
Sie unter folgendem Link:
http://developer.android.com/reference/android/content/res/TypedArray.html
Sie können dies verwenden, um ein Array anderer Ressourcen zu erstellen, z. B. Drawables. Beachten Sie, dass das Array nicht homogen sein muss, damit Sie ein Array mit gemischten Ressourcentypen erstellen können. Sie müssen jedoch wissen, welche und wo sich die Datentypen im Array befinden.
<?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>
Und erhalten Sie die Ressourcen in Ihrer Aktivität wie folgt
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);
Genießen!!!!!
Kotlin Weg könnte sein:
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)
}
In Kotlin können Sie Folgendes tun:
<integer-array name="drawer_icons">
<item>@drawable/drawer_home</item>
</integer-array>
Sie erhalten ein Array von Bildern aus der Ressource als TypedArray
val imageArray = resources.obtainTypedArray(R.array.drawer_icons)
Ressourcen-ID anhand des Index abrufen
imageArray.getResourceId(imageArray.getIndex(0),-1)
ODER Sie können die Ressource von imageView auf die ID setzen
imageView.setImageResource(imageArray.getResourceId(imageArray.getIndex(0),-1))
und zuletzt das Array recyceln
imageArray.recycle()
Soweit ich weiß, können Sie keine Arrays in R.drawable speichern.
Sie können ein Array in config.xml oder strings.xml erstellen, das mithilfe einer Alias-Ressource einen Pfad zu einer zeichnbaren Ressource zuordnet .
Überprüfen Sie, ob dies funktioniert, und lassen Sie mich wissen, wenn Sie zusätzliche Hilfe benötigen.