38. Android 反射资源工具ReflectionUtil
- Android 反射资源工具ReflectionUtil
- 工具代码
- 工具使用
工具代码
ReflectionUtil
public class ReflectionUtil {
public enum ResourcesType {
styleable,
style,
string,
mipmap,
menu,
layout,
integer,
id,
drawable,
dimen,
color,
bool,
attr,
anim
}
/**
* 根据名字,反射取得资源
*
* @param context context
* @param name resources name
* @param type enum of ResourcesType
* @return resources id
*/
public static int getResourceId(Context context, String name, ResourcesType type) {
String className = context.getPackageName() + ".R";
try {
Class<?> c = Class.forName(className);
for (Class childClass : c.getClasses()) {
String simpleName = childClass.getSimpleName();
if (simpleName.equals(type.name())) {
for (Field field : childClass.getFields()) {
String fieldName = field.getName();
if (fieldName.equals(name)) {
try {
return (int) field.get(null);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return -1;
}
}
工具使用
ReflectionUtilActivity
public class ReflectionUtilActivity extends AppCompatActivity implements View.OnClickListener {
ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_reflection_util);
this.imageView = (ImageView) this.findViewById(R.id.reflection_iv);
this.findViewById(R.id.reflection_bt).setOnClickListener(this);
}
/**
* Called when a view has been clicked.
*
* @param v The view that was clicked.
*/
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.reflection_bt:
/*
* 获取资源名为mm_1的mipmap类型文件
*/
this.imageView.setImageResource(ReflectionUtil.getResourceId(this, "mm_1", ReflectionUtil.ResourcesType.mipmap));
break;
}
}
}
时间: 2024-10-28 19:08:49