Tôi muốn lưu trữ ID tài nguyên có thể rút được ở dạng R.drawable.*
bên trong một mảng bằng cách sử dụng tệp giá trị XML và sau đó truy xuất mảng trong hoạt động của tôi.
Bất kỳ ý tưởng làm thế nào để đạt được điều này?
Tôi muốn lưu trữ ID tài nguyên có thể rút được ở dạng R.drawable.*
bên trong một mảng bằng cách sử dụng tệp giá trị XML và sau đó truy xuất mảng trong hoạt động của tôi.
Bất kỳ ý tưởng làm thế nào để đạt được điều này?
Câu trả lời:
Bạn sử dụng một mảng được gõ trong arrays.xml
tệp trong /res/values
thư mục của bạn trông như thế này:
<?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>
Sau đó, trong hoạt động của bạn, truy cập chúng như vậy:
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();
Trong value
thư mục tạo xml
tên tệp, nó arrays.xml
thêm dữ liệu vào nó theo cách này
<integer-array name="your_array_name">
<item>@drawable/1</item>
<item>@drawable/2</item>
<item>@drawable/3</item>
<item>@drawable/4</item>
</integer-array>
Sau đó, lấy mã của bạn theo cách này
private TypedArray img;
img = getResources().obtainTypedArray(R.array.your_array_name);
Sau đó, để sử dụng một Drawable
trong số này trong img
TypedArray
ví dụ như ImageView
background
sử dụng mã sau đây
ImageView.setBackgroundResource(img.getResourceId(index, defaultValue));
nơi index
là Drawable
chỉ mục.
defaultValue
là một giá trị bạn đưa ra nếu không có mục nàyindex
Để biết thêm thông tin về việc TypedArray
truy cập liên kết này
http://developer.android.com/reference/android/content/res/TypedArray.html
Bạn có thể sử dụng điều này để tạo ra một loạt các tài nguyên khác, chẳng hạn như drawables. Lưu ý rằng mảng không bắt buộc phải đồng nhất, vì vậy bạn có thể tạo một mảng các loại tài nguyên hỗn hợp, nhưng bạn phải nhận thức được những gì và nơi các loại dữ liệu trong mảng.
<?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>
Và có được các tài nguyên trong hoạt động của bạn như thế này
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);
Thưởng thức!!!!!
cách kotlin có thể là thế này:
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)
}
Trong Kotlin, bạn có thể làm như sau: -
<integer-array name="drawer_icons">
<item>@drawable/drawer_home</item>
</integer-array>
Bạn sẽ nhận được mảng hình ảnh từ tài nguyên như TypedArray
val imageArray = resources.obtainTypedArray(R.array.drawer_icons)
lấy ID tài nguyên theo chỉ mục
imageArray.getResourceId(imageArray.getIndex(0),-1)
HOẶC bạn có thể đặt tài nguyên của imageView thành id
imageView.setImageResource(imageArray.getResourceId(imageArray.getIndex(0),-1))
và cuối cùng tái chế mảng
imageArray.recycle()
Bạn không thể lưu trữ các mảng trong R.drawable theo như tôi biết.
Những gì bạn có thể làm là tạo một mảng trong config.xml hoặc String.xml để ánh xạ đường dẫn đến tài nguyên có thể vẽ bằng cách sử dụng tài nguyên bí danh .
Xem nếu điều này hoạt động, và xin vui lòng cho tôi biết nếu bạn cần thêm trợ giúp.