ndroid程序中的ID是怎么来的?如何与实际资源对应?

ndroid程序中的ID是怎么来的?如何与实际资源对应?,第1张

Android程序中的资源ID是Android SDK自动生成的,Android SDK会自动生成一个R文件,里面有所有的资源ID。

Android设备的设备id是惟一确定一台设备的ID标识,即不同的设备是不相同的,不会重复,而且是固定不变的。

Android中的组件要用一个int类型的值来表示,这个值也就是组件标签中的ID属性值。ID属性只能接受资源类型的值,即是必须以@开头的值,例如@id/abc等。

如果在@后面使用“+”则表示当修改完某个布局文件,并保存后,系统会自动在  R.java文件中生成相应的int类型变量。变量名就是“/”后面的值,例如@+id/xyz会在R.java文件中生成int xyz = value,其中value是一个十六进制的数。

@+id 系统会自动把你起的ID名字加入到配置文件中,在业务逻辑中可以直接在R.id中找到。

而用@id 则不会自动加载到R.id 而且也不能随意起名,要在Value目录下写一个ids.xml来对每个id进行声明,声明的个格式为,<item name="" type="id" />这种写法主要方便统一管理

如果xyz在R.java中已经存在同名的变量,就不再生成新的变量而该组件会使用这已存在的变量的值。

R文件的说明如下:

/* AUTO-GENERATED FILE.  DO NOT MODIFY.

* This class was automatically generated by the

* aapt tool from the resource data it found.  It

* should not be modified by hand.

*/

提示开发者,这是一个自动生成的文件,不能手动去修改它。

其实你可以把R文件看成一个特殊的类。

调用R文件里面的东西。如:R.drawable.b

这就是调用了R类里面的内部类drawable中的b成员变量

b是一个int类型,在R文件中可以看到drawable里面的b=xxxx,、

是一个int类型,你可以简单的理解为xxxx是一个内存地址。

这样就好理解了,其实你编译的时候系统会把资源文件的名字分配一个内存

空间,你调用R.drawable.b的时候其实就是调用了那个内存空间。

通过反编译之后你之所以看不到R文件,那是因为编译的时候

会把R.drawable.b 编译之后是xxx的格式,直接吧内存地址放上,所以此时也

不需要R文件了,如set....View(R.layout.c)编译之后是反编译之后你可以看到的是

set....View(xxxx)的形式

敲字好累。。。。。所以。你懂的


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/11625045.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存