我了解到:
@+id 新增一个资源id @id和android:id,引用现有的资源id
但是有时候我看到有的程序里,全局搜索只能搜索到@id/xxx,从没看到过@id/xxx的定义,那么这个id是怎么在R.java中生成的呢?是系统内置的关键字?
另外,我看到有的同一个程序中不同的组件使用了同一个id,比如下图,NavigationView和ImageView都使用了android:id="@id/navigation_view",为什么?
也有可能是在values文件夹下自定义了一组id集合,这个也可以直接使用@id/xxx来引用
<resources>
<item name="navigation_view" type="id" />
</resources>
正如你所了解的,当我们在xml中为某个控件定义id时使用@+id/xxx 在R.java中如果不存在就会生成相应的xxx变量名值为int型,存在就会使用原来的int值,所以每一个xxx都有一个唯一的标识。
然而当我们在资源文件中定义ids.xml文件,在其中可以自定义id类型的变量名形如:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="cc" type="id">213</item>
</resources>
于是我们可以在布局文件中如下引用:
<Button
android:id="@id/cc"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
至于你说的引用相同的@id/xxx 也是于与@+id/xxx 相同的道理。