如何避免android layout.xml 布局文件中重名id的错误

原创 2015年11月20日 11:31:34


在android 开发中,用来描述视图布局的layout.xml文件中,通常会涉及到控件或子布局的变量命名问题,有的时候大家为了提编码速度,可能会造成同名id的问题。那么布局文件中的id是否可以同名呢?


分两种情况:

同一个layout.xml中的id重名

不同layout.xml文件的id重名


情况一

在同个一个Xml文件的中若同名了,则前一个有效,而后一个无效,即后一个Null掉。如

    <span style="font-size:14px;"><Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/textView1"
        android:layout_alignRight="@+id/textView1"
        android:layout_marginBottom="58dp"
        android:layout_marginRight="18dp"
        android:text="Button1" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/button"
        android:layout_centerVertical="true"
        android:text="Button2" /></span>


前一个Button有效(即 android:text="Button1" ),后一个无效。

情况二:在不同的Xml 文件中的同名

在同个一个Xml文件的中若同名了,两者都有效的。

当android的工程越来越大。xml文件越来越多时,避免不了两个xml文件中同样的组件使用同样的id名字,gen目录下的R.java文件中,有关id的声明都在id的class中,即public static final class id{};当两个xml文件中同样的组件,比如Button,有可能很多个文件中,都有id=”@+id/Button”,开始以为在Java类中引用会重复的id造成程序的不识别。

后来偶然一次错误发现,只需你setContentView(R.layout.updatemyaddressbook);中的xml文件以及这个xml文件相关的xml文件中的id不重复,在类中使用findViewById(R.id.Button);时,程序是不会不识别的。

这个问题非常地容易理解:因为在Android的框架设计中,每一个控件都隶属于一棵控件树,每个控件都被其父控件所管理与调配,而根控件是一个容器控件,所有的子控件都是构造在这个根控件之上,这样并形成了一个控件树的控件域,在这个控件域中是不允许重名的,超出了这个控件域则这些控件的ID是无效的,也就是说在容器控件中的子控件是不允许重名的,而不在同一容器控件中的两个控件重名也无所谓。


建设在实际的开发中还是不要重名的好,那到如何解决这个问题呢?

通过配置eclipse提高这种错误的提示级别就可以了。具体方法如下:


windows->preferrece(首选项)-Android-Link Error Checking将DuplicateIds的提示级别 提高 为Error,以后再出现重名ID的时候,就会提示错误了。











版权声明:本文为博主原创文章,转载请注明来源(http://blog.csdn.net/ruglcc)

android主工程和第三方库工程中layout文件重名导致的问题

在android开发过程中,我们会在自己的工程里面新建很多layout文件,一般都是按照自己的想法来命名。 比如一个自定义的tab,我们新建一个文件叫做layout_tab.xml。 而同时我们经...
  • ddnosh
  • ddnosh
  • 2018年01月29日 13:46
  • 24

关于多个布局文件中的view共用一个id的问题的探讨

以前一直以为ming
  • Z18789231876
  • Z18789231876
  • 2014年09月23日 10:01
  • 1342

Android Studio插件之Android Layout ID Converter教程

Android Studio插件之Android Layout ID Converter教程Android Layout ID Converter这是一个非常棒的Android Studio插件。 ...
  • Poison_H
  • Poison_H
  • 2015年07月02日 10:10
  • 5375

Android 不同View ID相同

今天在写一段代码是,两个Activity的Button设置了相同的ID,竟然没有报错。然后查看R.java文件,发现class id中也只生成了一个Button变量,且分别在两个Activity中进行...
  • program035
  • program035
  • 2011年10月25日 19:57
  • 8142

同一个布局文件id命名重复

遇到一个问题,在程序编译运行过程中没有报错,打包的时候,报错了. 找到问题一看,晕,.里面TextView的id命名竟然是全部相同的.查找了一下资料,这个可以在编译的时候,忽略id重复的问题. 解...
  • zhuyaozong
  • zhuyaozong
  • 2016年01月18日 10:41
  • 254

android studio 不同module资源重名引起引用混乱

方法一: 通过gradle配置dependencies { provided fileTree(dir: ‘libs’, include: [‘*.jar’])}方式二: 右键module选...
  • liudao7994
  • liudao7994
  • 2016年09月12日 11:44
  • 1664

Android Studio必备插件android layout id converter

android layout id converter是Android Studio的一个插件,具体作用看下图 简而言之,可以一秒定义控件并且找到 接下来教大家导入和使用这个插件的方法: ...
  • wuyou1336
  • wuyou1336
  • 2017年03月28日 22:53
  • 134

android相对布局中@id和@+id的区别(原理)

@id和@+id的区别,网上讲的主要是@id是引用已经存在的控件,而@+id则是声明一个新的id。 但是在相对布局中,layout_below="@id/xxx"和 layout_below="@+...
  • qq_32623363
  • qq_32623363
  • 2017年08月15日 18:47
  • 296

Android布局文件layout.xml的属性详解

Android布局文件layout.xml的一些属性值   第一类:属性值 true或者 false android:layout_centerHrizontal 水平居中 an...
  • Faith_full
  • Faith_full
  • 2015年01月20日 16:16
  • 896

android 布局文件中控件ID、name标签属性的命名包含“@”、“.”、“+”等等符号的含义

1. 在项目的根目录有个配置文件“AndroidManifest.xml”,是用来设置Activity的属性的如 ...
  • songylwq
  • songylwq
  • 2011年10月25日 09:53
  • 10367
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何避免android layout.xml 布局文件中重名id的错误
举报原因:
原因补充:

(最多只允许输入30个字)