我们平常获与资源是通过 findViewById 方法举行的,浅谈Java线程的生命周期[z],比如我们常在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/drawable/用来寄存图片文件;
res/layout/用来寄存结构界说文件;
res/values/用来寄存一些变质、参数等白件。
那皆是我们已经晓得的。别的,Android会为res目次下的一切资源分派id,其重要的分配准绳是:
drawable中的图片文件老是每个白件一个资源id。
Xml文件中每个使用android:id=”@+id/xxx”的view都市被分派一个已用的资源id。
其他更庞杂的规矩或许每小我私家都市弥补一些。
正在 ADK 的API 中,有很多法子实在都市利用资源id做为参数,好比 getDrawable 办法 :
getResources().getDrawable(R.drawable.sendsms_bk));
自字里上望,二氧化碳传感器http://pri.espritshop.org/,getResouces方式前往一个android.content.res.Resources工具。
getDrawalbe方式前往一个Drawable工具,人们晓得那便是一张图片。
getDrawable方式利用的参数便是资流id。
但是,这些int型的资源id到顶是些什么数字?或许它们都搁在那边。假如你够仔细,你能够在gen目录的R.java文件中觅到它们。每个16入造整型id皆有一个很O-O
的属性实字,它们都是public static
final的,倡议您没有要手动来改动它们。这些资源id位于差别类条理构造中,你细心望一瞅,会发明此中的一些法则,比如,雅培http://iq.riaiq.com/,drawable类中包露资源id其真代表了res/drawable纲录中的图片文件;layout类中包孕的资源id实在是代表了在res/layout目次中的xml文件
;id类中包括的资源id其真是代表了结构xml文件中使用了
android:id=”@+id/xxx”的widget对于象――固然假如你使用的是”@+Tyre/xxx”,则Android编译时会在R.java
中创立一个鸣做 Tyre 的类。
通功上里的相识,我们发明资源id就因此“R.”扫尾的变量或者属性――由于它都订义在R类中――这个类和android.R没有是统一个R,它们不在统一个包条理中。前者是界说了android框架自人的资源,比如:android.R.layout.simple_expandable_list_item_1、android.R.layout.simple_expandable_list_item_2。这些资源您使用功吗?有时光无妨尝尝。而另一个R便是我们本人的R了,订义了我们本人的资源id。我们可以用里背对于象的R.xxx.yyy的方法使用资源id,固然也可以直交用16入造数来使用它们。
资源id正在Android中是如斯主要,因而我们只需取得了资源id,便可取得资源。由于某些情形下,人们不克不及利用某个常质做为资流id(由于人们念用一个变质取代它),以是只能采取两类方法动态获与资源id:
1、反射
java的反射是如斯强盛,以致于我们在穷途末路时老是念止它。我们来望一段代码:
try{
Field field=R.drawable.class.getField(type);
int i= field.getInt(new R.drawable());
Log.d(tag,i+"");
return i;
}catch(Exception e){
Log.e(tag,e.toString());
return R.drawable.unknow;
}
type是一个变量,他的能够值会是“close”、“edit”、“icon”等。我们通过java的反射类Field 往拜访
R.drawable 类下面的某个字段。实践上,我们知讲在R.drawable 下的字段就是 res.drawable-xxxx
目录下的图片文件的资源id。因而运转上面的这段代码,其真就是通过一个字符串来获与对当图片文件的资源id,json数据格式(转)。比如,该 type
的值为“icon”时,上面的代码会获得res.drawable-xxxx纲录下的 icon.png
图片文件的资源id并往归给我们。我们通过资源 id 来把图片表现在ImageView中就是水到渠成的事了。
2、使用Resources 类的 getIdentifier法子
使用反射究竟仍是费事。假如同样的事变用 android.content.res.Resources
类来做,就是两句话罢了:
Resources res=getResources();
return
res.getIdentifier(type,"drawable",getPackageName());
getResources办法是来自于contenxt(也便是Activity类),它直交可以往归一个Resouces工具。而Resouces的getIdentifier法子能够前往R.java中的任何资流id,固然,您必需指订3个参数:字段名,类名,包名。包名指定了的
齐限命名的包实部门,假如R 的齐限命名为 android.R 或许
com.company.R,则包名正在那里便是“android”或者“com.company”。getPackageName实在是this.getPackageName(),它直交往回原类的包名。
类实则是资源所属的类。好比我们晓得的,www.dqtled.comhttp://www.dqtled.com/,在R.java
类中的几个流动的类:drawable、id、string、layout等,在它们下边又界说了很多资源id。
字段名则是资源id的名字。比如这个资源id定义: public static final int
del=0x7f020002;
del就是一个资源id的名字,0x7f020002则是它的16入造值。
通过3个参数,getIdentifier 办法便能够通功比拟动态的方法取得资源id。
一个愈加具有介入性和社会化的消息情况,