首页 > 代码库 > Android中@+id和@id的差别

Android中@+id和@id的差别

Android中的组件须要用一个int类型的值来表示。这个值也就是组件标签中的id属性值。

id属性仅仅能接受资源类型的值,也就是必须以@开头的值,比如,@id/abc、@+id/xyz等。 
假设在@后面使用“+”,表示当改动完某个布局文件并保存后,系统会自己主动在R.java文件里生成对应的int类型变量。变量名就是“/”后面的值。比如,@+id/xyz会在R.java文件里生成int xyz = value。当中value是一个十六进制的数。假设xyz在R.java中已经存在同名的变量,就不再生成新的变量。而该组件会使用这个已存在的变量的值。 
也就是说,假设使用@+id/name形式,当R.java中存在名为name变量时,则该组件会使用该变量的值作为标识。假设不存在该变量。则加入一个新的变量。并为该变量赋对应的值(不会反复)。 
    既然组件的id属性是一个资源id就能够,那么自然能够设置不论什么已经存在的资源id值,比如,@drawable/icon、@string/ok、@+string/you等。当然,也能够设置android系统中已存在的资源id,比如。楼主提出的@id/android:list。那么这个android是什么意思呢,实际上。这个android就是系统的R类(在R.java文件里)所在的package。我们能够在Java代码编辑区输入android.R.id.,就会列出对应的资源id。比如,也能够设置id属性值为@id/android:message。 <ListView android:id="@+id/android:message"    android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 
还有第二种方法查看系统中定义的id,进入<android sdk安装目
录>\platforms\android-1.5\data\res\values文件夹。找到ids.xml文件。打开后,内容例如以下: 
<?xml version="1.0" encoding="utf-8"?> <resources> 
<item type="id" name="price_edit">false</item> <item type="id" name="amount_edit">false</item> </resources>  

若在ids.xml中定义了ID。则在layout中可例如以下定义@id/price_edit,否则@+id/price_edit


总结一下:

一、android:id="@android:id/tabhost"   是调用系统内部的ID和代码中

mTabContent = (FrameLayout) findViewById(com.android.internal.R.id.tabcontent);是一回事。

二、android:id="@+id/llRoot" 就是自定义一个新的ID。

三、android:id="@id/llRoot"使用一个已经存在的ID号引用(跟第一个不同,这里引用的不是系统的


Android中@+id和@id的差别