android 中不同的Xml中id可以重名吗?
16lz
2021-01-26
今天在做项目的时候,居然发现@+id 居然可以重名,而且程序还不会报错。感觉不科学啊,这到底怎么回事呢?经过google 和百度之后,才有所了解。
情况一:同一个Xml文件中的同名
在同一个Xml文件的中若同名了,则前一个有效,而后一个无效,as会报异常。如:
前一个Button有效(即 android:text="Button1" ),后一个异常。 情况二:在不同的Xml 文件中的同名
在不同的Xml文件中若id同名了,两者都有效的。
当android的工程越来越大。xml文件越来越多时,避免不了两个xml文件中同样的组件使用同样的id名字,gen目录下的R.java文件中,有关id的声明都在id的class中,即public static final class id{};当两个xml文件中同样的组件,比如Button,有可能很多个文件中,都有id=”@+id/Button”,开始以为在Java类中引用会重复的id造成程序的不识别。
后来写个demo测试发现,只需你先setContentView(R.layout.xxx);然后使用findViewById(R.id.Button);时,程序是可以识别的。
这个问题非常地容易理解:因为在Android的框架设计中,每一个控件都隶属于一棵控件树,每个控件都被其父控件所管理与调配,而根控件是一个容器控件,所有的子控件都是构造在这个根控件之上,这样并形成了一个控件树的控件域,在这个控件域中是不允许重名的,超出了这个控件域则这些控件的ID是无效的,也就是说在容器控件中的子控件是不允许重名的,而不在同一容器控件中的两个控件重名也无所谓。
欢迎关注我的微信公众号:
更多相关文章
- Android(安卓)中的文件操作
- Android入门笔记 - 数据存储 - 网络
- Android(安卓)本地文件缓存各个方法获取的路径小结
- Android笔记之使用CMake进行JNI开发(Android(安卓)Studio)
- android集成 ijkplayer Ijkplayer集成使用方案 + demo
- 证书番外篇之Android证书
- MAC查看某一so文件的cpu匹配
- Android(安卓)DOM方式解析XML文件
- Android(安卓)studio百度地图SDK开发 2020最新超详细的Android(