关于Android中根据ID名动态获取资源的两个方法
2023-09-11 14:17:57 时间
在开发中, 我们习惯了类似下面这种方式去实现引用资源: context.getResources().getDrawable(R.drawable.flower); 但是,当我们提前知道这个资源的id,想动态去引用,而不是在id里面固化应该怎么办呢? 比如某个图片资源的id是R.drawable.test_1, 而且有序的还有test_2,test_3, 我们如何动态的去引用它们?这里有两种方案:直接用反射和用resource的getIdentifier()方法,它们原理都差不多利用反射实现. 第一种方法: /** * 输入id,返回Bitmap * @param context * @param id * @return */ public static Bitmap getBitMapById(Context context,String id){ Bitmap mBitmap=BitmapFactory.decodeResource(context.getResources(),getresourceId("test_"+id)); return mBitmap; } public static int getresourceId(String name){ Field field; try { field = R.drawable.class.getField(name); return Integer.parseInt(field.get(null).toString()); } catch (NoSuchFieldException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NumberFormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } return 0; } 第二种方法(更加简洁): public static Bitmap getBitmapById(Context context,String id){ Resources res = context.getResources(); Bitmap mBitmap=BitmapFactory.decodeResource(res, res.getIdentifier(id, "drawable", "com.test.android")); return mBitmap; } 第二种方法中res.getIdentifier()里面三个参数: 第一个是资源id名,第二个是类名,如果是string类型就是String,还有常见的drawable,layout等等,第三个参数是项目包名. 上面2种方法都能动态获取资源,当我们知道某些资源的id是规律性的,比如前缀相同,后缀都是a-z 或者数字排序等等,就能动态构造id获取资源,而不必每次都写context.getResources().getDrawable(R.drawable.test_1); 希望对大家有帮助.
相关文章
- [Android Pro] 关于BitmapFactory.decodeStream(is)方法无法正常解码为Bitmap对象的解决方法
- [Android Pro] android 混淆文件project.properties和proguard-project.txt
- android:theme决定AlertDialog的背景颜色
- Android发送短信
- Android开发学习---使用Intelij idea 13.1 进行android 开发
- Android复习--广播
- android开发进阶学习博客资源
- 文件_ _android从资源文件中读取文件流并显示的方法
- 【已解决】unity4.2.0f4 导出Android工程报错:Error building Player: ArgumentException: Illegal characters in path. [unity导出android工程 报错,路径含有非法字符]
- Android模拟聊天工具
- 【VLC-Android】vlc-android简例
- 【Android】保存Fragment切换状态
- Android 删除打包文件
- android 10.0添加开机铃声
- Android RecyclerView的滚动原理
- 【Android Gradle 插件】DexOptions 配置 ⑧ ( preDexLibraries 属性配置 | threadCount 属性配置 )
- 【Android 进程保活】应用进程拉活 ( 系统 Service 机制拉活 | Service 组件 onStartCommand 方法分析 | 源码资源 )
- Android相关属性的介绍:android:exported = true
- Android实战技巧之十九:android studio导出jar包(Module)并获得手机信息
- Android - 控件android:ems属性
- Android抽屉(SlidingDrawer --类似android通知栏下拉效果)
- Android ListView实现仿表格功能效果