android @id和@+id的问题

我了解到:

@+id 新增一个资源id @id和android:id,引用现有的资源id

但是有时候我看到有的程序里,全局搜索只能搜索到@id/xxx,从没看到过@id/xxx的定义,那么这个id是怎么在R.java中生成的呢?是系统内置的关键字?
另外,我看到有的同一个程序中不同的组件使用了同一个id,比如下图,NavigationView和ImageView都使用了android:id=”@id/navigation_view”,为什么?

正如你所了解的,当我们在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 相同的道理。

也有可能是在values文件夹下自定义了一组id集合,这个也可以直接使用@id/xxx来引用
<resources>

<item name="navigation_view" type="id" />

</resources>

发表评论

电子邮件地址不会被公开。 必填项已用*标注