38. Android(安卓)反射资源工具ReflectionUtil
16lz
2021-01-24
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; } }}
更多相关文章
- android客户端与服务端交互的工具类
- Android消息机制——时钟显示和异步处理工具类(AsyncTask)
- android studio 下载与安装
- 编译android
- 资源连接
- Ubuntu Android编译服务器搭建
- Android(安卓)关键资源的定义和使用
- android 细节之android.view.InflateException: Binary XML file