今天在做项目的时候,居然发现@+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是无效的,也就是说在容器控件中的子控件是不允许重名的,而不在同一容器控件中的两个控件重名也无所谓。

欢迎关注我的微信公众号:


更多相关文章

  1. Android(安卓)中的文件操作
  2. Android入门笔记 - 数据存储 - 网络
  3. Android(安卓)本地文件缓存各个方法获取的路径小结
  4. Android笔记之使用CMake进行JNI开发(Android(安卓)Studio)
  5. android集成 ijkplayer Ijkplayer集成使用方案 + demo
  6. 证书番外篇之Android证书
  7. MAC查看某一so文件的cpu匹配
  8. Android(安卓)DOM方式解析XML文件
  9. Android(安卓)studio百度地图SDK开发 2020最新超详细的Android(

随机推荐

  1. 【Android】数据存储之Files
  2. android 音视频直播
  3. Airbnb 动画库Lottie
  4. android 单元测试
  5. Android自动化测试工具——Monkey
  6. Android(安卓)Spinner
  7. Android(六)通知、样式、主题、HTML
  8. 详解android shape的使用总结
  9. Android(安卓)框架MVP
  10. Android之Broadcast Receiver的两种注册