ฉันต้องการเก็บ ID ของทรัพยากร drawable ในรูปแบบของR.drawable.*
อาร์เรย์ภายในโดยใช้ไฟล์ค่า XML แล้วดึงข้อมูลอาร์เรย์ในกิจกรรมของฉัน
ความคิดใด ๆ ของวิธีการบรรลุสิ่งนี้?
ฉันต้องการเก็บ ID ของทรัพยากร drawable ในรูปแบบของR.drawable.*
อาร์เรย์ภายในโดยใช้ไฟล์ค่า XML แล้วดึงข้อมูลอาร์เรย์ในกิจกรรมของฉัน
ความคิดใด ๆ ของวิธีการบรรลุสิ่งนี้?
คำตอบ:
คุณใช้อาร์เรย์ที่พิมพ์ลงในarrays.xml
ไฟล์ภายใน/res/values
โฟลเดอร์ของคุณที่มีลักษณะดังนี้:
<?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>
จากนั้นในกิจกรรมของคุณเข้าถึงพวกเขาเช่น:
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();
ในvalue
โฟลเดอร์สร้างxml
ชื่อไฟล์มันarrays.xml
เพิ่มข้อมูลไปด้วยวิธีนี้
<integer-array name="your_array_name">
<item>@drawable/1</item>
<item>@drawable/2</item>
<item>@drawable/3</item>
<item>@drawable/4</item>
</integer-array>
จากนั้นรับรหัสของคุณด้วยวิธีนี้
private TypedArray img;
img = getResources().obtainTypedArray(R.array.your_array_name);
จากนั้นให้ใช้สิ่งDrawable
เหล่านี้ในimg
TypedArray
ตัวอย่างเช่นImageView
background
ใช้รหัสต่อไปนี้
ImageView.setBackgroundResource(img.getResourceId(index, defaultValue));
ซึ่งindex
เป็นDrawable
ดัชนี
defaultValue
เป็นค่าที่คุณให้ถ้าไม่มีรายการอยู่ที่นี่index
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการTypedArray
เยี่ยมชมลิงค์นี้
http://developer.android.com/reference/android/content/res/TypedArray.html
คุณสามารถใช้สิ่งนี้เพื่อสร้างอาร์เรย์ของทรัพยากรอื่น ๆ เช่น drawable โปรดทราบว่าอาเรย์ไม่จำเป็นต้องเป็นเนื้อเดียวกันดังนั้นคุณสามารถสร้างอาเรย์ของชนิดของทรัพยากรแบบผสมได้ แต่คุณต้องระวังสิ่งที่และชนิดของข้อมูลที่อยู่ในอาเรย์
<?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>
และรับทรัพยากรในกิจกรรมของคุณเช่นนี้
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);
สนุก!!!!!
วิธี kotlin อาจเป็นเช่นนี้:
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)
}
ใน Kotlin คุณสามารถทำได้ดังนี้: -
<integer-array name="drawer_icons">
<item>@drawable/drawer_home</item>
</integer-array>
คุณจะได้รับอาร์เรย์ของรูปภาพจากทรัพยากรเป็น TypedArray
val imageArray = resources.obtainTypedArray(R.array.drawer_icons)
รับ ID ทรัพยากรตามดัชนี
imageArray.getResourceId(imageArray.getIndex(0),-1)
หรือคุณสามารถตั้งค่าทรัพยากรของ imageView เป็น id
imageView.setImageResource(imageArray.getResourceId(imageArray.getIndex(0),-1))
และในที่สุดรีไซเคิลอาร์เรย์
imageArray.recycle()
คุณไม่สามารถจัดเก็บอาร์เรย์ใน R.drawable เท่าที่ฉันรู้
สิ่งที่คุณสามารถทำได้คือการสร้างอาร์เรย์ใน config.xml หรือ strings.xml ที่แผนที่เส้นทางไปยังทรัพยากร drawable โดยใช้นักทรัพยากรนามแฝง
ดูว่ามันใช้งานได้และโปรดแจ้งให้เราทราบหากคุณต้องการความช่วยเหลือเพิ่มเติม