资源 Id简介:
我们平时获取资源是通过 findViewById 方法进行的,比如我们常在onCreate方法中使用这样的语句:
btnChecked=(ImageView)findViewById(R.id.imgCheck);
findViewById是我们获取layout中各种View 对象比如按钮、标签、ListView和ImageView的便利方法。顾名思义,它需要一个int参数:资源id。
资源id非常有用。Android回自动为每个位于res目录下的资源分配id,包括各种图片文件、xml文中的”@+id”对象。res的子目录几乎总是固定的,比如每次都能见到的:drawable-xxxx、layout、values,以及不常见的:anim、xml、row、color。
Android会为res目录下的所有资源分配id,其主要的分配原则是:
drawable中的图片文件总是每个文件一个资源id。
Xml文件中每个使用android:id=”@+id/xxx”的view都会被分配一个未用的资源id。
--------------------------------------------------------------------------------------------------------------------------------------------使用getIdentifier()获取资源Id:
函数原型:
int getIdentifier(String name, String defType, String defPackage)
Return a resource identifier for the given resource name. A fully qualified resource name is of the form "package:type/entry". The first two components (package and type) are optional if defType and defPackage, respectively, are specified here.
Note: use of this function is discouraged. It is much more efficient to retrieve resources by identifier than by name.
Parameters
name The name of the desired resource.
defType Optional default resource type to find, if "type/" is not included in the name. Can be null to require an explicit type.
defPackage Optional default package to find, if "package:" is not included in the name. Can be null to require an explicit package.
Returns
int The associated resource identifier. Returns 0 if no such resource was found. (0 is not a valid resource ID.)
1> 方式一
Resources resources = context.getResources(); int indentify = resources.getIdentifier(org.loveandroid.androidtest:drawable/icon”,null,null); if(indentify>0){ icon = resources.getDrawable(indentify);第一个参数格式是:包名 + : + 资源文件夹名 + / +资源名;是这种格式 然后其他的可以为null
2> 方式二
Resources resources = context.getResources();
int indentify= getResources().getIdentifier("icon", "drawable", "org.anddev.android.testproject");
第一个参数为ID名,第二个为资源属性是ID["id"]或者是Drawable["drawable"],第三个为包名。
附加:
获取资源中的其他资源:
1.要是想获得string可以这样写:
getResources().getIdentifier("name", "string", packdgeName);
2.要是想获得array中的数组,可以这样写:
getResources().getIdentifier("name", "array", packdgeName);