java中xml与控件_android src中.java、layout中.xml和AndroidManifest.xml文件是通过什么联系起来的?起什么作用?...

展开全部

简单说来就是映射。

你可以看到一个正常的62616964757a686964616fe59b9ee7ad9431333330323965android工程下面有个gen文件夹,其中有个包名.R.java,就类似于map的key-value,R.java中就是存放了一个个key值,比如R.drawable.a就对应了res/drawable/a.png文件,那么我们通过此key就可以获得此图片文件的路径,通过加载图片的方法加载为图片,当然有人有疑惑为什么不加载res/drawable-hdpi/a.png,这个是框架层或者底层读取机器的属性(比如分辨率、密度信息)分辨出究竟加载哪个文件夹下面的文件。

因为同属于一个包,有规范的文件夹命名方式,如果你将values文件夹换成valuess,那么就会报错,这个就规定了路径是写死的,所以我们就可以通过id获取写死的路径下面的文件加载。

对于AndroidManifest.xml中加载res中的资源的原理,跟src中的.java如何加载res中的文件是一个意思。

但是AndroidManifest.xml如何加载src中的.java,看图片,这是一个apk中包含的文件,classes.dex是所有.java文件编译过后组合的一个class文件集合,包括R.java编译过后的class文件,resources.arsc中放的是匹配信息,就相当于map信息,哪个key(就是id)对应哪个value。

程序启动的时候,先读取AndroidManifest.xml文件,知道包名,那么此程序的路径就无所遁形,AndroidManifest.xml中有些R.drawable.icon的id,它是先读取classes.dex中的R class文件,然后根据匹配表resources.arsc知道目标文件是在哪儿,那么就可以加载了。 当然classes.dex中某个控件也想加载资源,那么方式是一样的。

a73144ebbd544e838dcf79d484bdb6a3.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值