在某些情况下,需要在应用程序的资源中创建和定义自定义对象。这样的对象可以由Java简单类型,例如Integer,Float,String。
这是如何导入在应用程序资源中定义的对象的示例。该对象包含Category3个类别的属性:
ID
颜色
名称
这POJO在categories.xml文件中具有等效性,其中每个数组具有为每个类别定义的相同属性。
为您的对象创建一个模型:
public class Category { private Type id; private @ColorRes int color; private @StringRes String name; public Category getId() { return id; } public void setId(Category id) { this.id= id; } public String getName() { return name; } public void setName(String name) { this.name= name; } public int getColor() { return color; } public void setColor(int color) { this.color= color; } public enum Type{ REGISTRATION, TO_ACCEPT, TO_COMPLETE, TO_VERIFY, CLOSED } }
在文件res/values夹中创建文件:
categories.xml
组成由资源组成的每个模型:
<array name="no_action"> <item>0</item> <item>@android:color/transparent</item> <item>@string/statusRegistration</item> </array> <array name="to_accept"> <item>1</item> <item>@color/light_gray</item> <item>@string/acceptance</item> </array> <array name="opened"> <item>2</item> <item>@color/material_green_500</item> <item>@string/open</item> </array> <array name="to_verify"> <item>3</item> <item>@color/material_gray_800</item> <item>@string/verification</item> </array> <array name="to_close"> <item>4</item> <item>@android:color/black</item> <item>@string/closed</item> </array>
在资源文件中定义一个数组:
<array name="categories">
<item>@array/no_action</item>
<item>@array/to_accept</item>
<item>@array/opened</item>
<item>@array/to_verify</item>
<item>@array/to_close</item>
</array>
创建一个函数来导入它们:
@NonNull
public List<Category> getCategories(@NonNull Context context) {
final int DEFAULT_VALUE = 0;
final int ID_INDEX = 0;
final int COLOR_INDEX = 1;
final int LABEL_INDEX = 2;
if (context == null) {
return Collections.emptyList();
}
// 从`tasks_categories`数组中获取对象数组
TypedArray statuses = context.getResources().obtainTypedArray(R.array.categories);
if (statuses == null) {
return Collections.emptyList();
}
List<Category> categoryList = new ArrayList<>();
for (int i = 0; i < statuses.length(); i++) {
int statusId = statuses.getResourceId(i, DEFAULT_VALUE);
// 获取一个对象的属性
TypedArray rawStatus = context.getResources().obtainTypedArray(statusId);
Category category = new Category();
int id = rawStatus.getInteger(ID_INDEX, DEFAULT_VALUE);
Category.TypecategoryId;
//ID应该使用`Category.Type`保持顺序。
switch (id) {
case 0:
categoryId = Category.Type.REGISTRATION;
break;
case 1:
categoryId = Category.Type.TO_ACCEPT;
break;
case 2:
categoryId = Category.Type.TO_COMPLETE;
break;
case 3:
categoryId = Category.Type.TO_VERIFY;
break;
case 4:
categoryId = Category.Type.CLOSED;
break;
default:
categoryId = Category.Type.REGISTRATION;
break;
}
category.setId(categoryId);
category.setColor(rawStatus.getResourceId(COLOR_INDEX, DEFAULT_VALUE));
int labelId = rawStatus.getResourceId(LABEL_INDEX, DEFAULT_VALUE);
category.setName(getString(context.getResources(), labelId));
categoryList.add(taskCategory);
}
return taskCategoryList;
}