android资源id前缀,Android中根据ID名动态获取资源的两个方法

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

context.getResources().getDrawable(R.drawable.flower);

可是,当咱们提早知道这个资源的id,想动态去引用,而不是在id里面固化应该怎么办呢? 好比某个图片资源的id是R.drawable.test_1, 并且有序的还有test_2,test_3, 咱们如何动态的去引用它们?这里有两种方案:直接用反射和用resource的getIdentifier()方法,它们原理都差很少利用反射实现.web

第一种方法:svg

/**

* 输入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等等,第三个参数是项目包名.url

上面2种方法都能动态获取资源,当咱们知道某些资源的id是规律性的,好比前缀相同,后缀都是a-z 或者数字排序等等,就能动态构造id获取资源,而没必要每次都写context.getResources().getDrawable(R.drawable.test_1);spa

更多例子:

一,获取android工程里面的各类资源的id;

1.1 string型 好比下面:

<< string name=”OK”>> 客户端请求成功 << / string>>code

//string资源中 名称为OK的 id 获取方式

int strId = getResources().getIdentifier("OK", "string", getPackageName());1

2

1.2 color型 好比下面:

<< color name=”colorPrimary”>>#3F51B5 << /color>>orm

//color资源中 id 获取

int colorId = getResources().getIdentifier("colorPrimary", "color", getPackageName());1

2

1.3 dimens型 好比下面:

<< dimen name=”horizontal_margin”>16dp<< /dimen>>xml

//deimens资源 id 获取

int dimenId = getResources().getIdentifier("horizontal_margin", "dimen", getPackageName());1

2

1.4 mipmap文件夹下或者drawable文件夹下面的:好比ic_launcher.png排序

// mipmap文件夹下的名称为ic_launcher的图片的id

//mipmap资源id

int mipmapId = getResources().getIdentifier("ic_launcher", "mipmap", getPackageName());1

2

3

1.5布局文件资源 好比R.layout.activity_main

//布局文件的id,好比:R.layout.activity_main

//布局资源id

int layoutId = getResources().getIdentifier("activity_main", "layout", getPackageName());1

2

3

二.获取Android系统里面的资源id

//获取系统里的资源id android.R.drawable.ic_menu_share

int id = getResources().getIdentifier("ic_menu_share", "drawable", "android"); //注意,最后一个参数必须是“android1

2

三.获取Android工程资源的Uri路径,通常是图片,res或者asset下的

//*获取Res资源的url ContentResolver.SCHEME_ANDROID_RESOURCE*/

Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.mipmap.ic_launcher);

Uri uri = Uri.parse("res:///" + R.mipmap.ic_launcher);

//*获取asset资源的url,ContentResolver.SCHEME_FILE*/

Uri assetUri = Uri.parse("file:///android_asset/" + "qq.png");1

2

3

4

5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值