关于Android中根据ID名动态获取资源的两个方法

在开发中, 我们习惯了类似下面这种方式去实现引用资源:

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);

希望对大家有帮助.


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值