为什么设计者使用“@+id”而不是“@id”作为约束?

del*_*ver 5 android designer android-layout android-studio

我一直理解@+id指示创建一个新的ID(通常与 一起使用android:id),并@id在其他地方引用它,正如这里的一个流行问题官方文档中详细解释的那样:

字符串开头的 at 符号 (@) 指示 XML 解析器应解析并扩展 ID 字符串的其余部分,并将其标识为 ID 资源。加号 (+) 表示这是一个必须创建的新资源名称并将其添加到我们的资源中(在 R.java 文件中)。Android 框架还提供了许多其他 ID 资源。引用Android资源ID时,不需要加号,但必须添加android包命名空间...

这一点没有得到强制执行,这有点奇怪。您可以在任何地方使用@+id相同的 id 多次,这似乎不是错误或问题(除非您在多个android:id声明中使用相同的 id)。

当在 Android Studio 中使用具有约束布局的图形设计器时(实际上它可以与所有内容一起使用,我还没有检查),每当添加约束时,它都会像这样声明它们:

app:layout_constraintTop_toBottomOf="@+id/rlistfrag"
Run Code Online (Sandbox Code Playgroud)

whererlistfrag被分配给android:id同一文件中的另一个元素——如果它尚不存在,则设计者无法创建约束,因此不会存在上下文歧义。1 根据文档,这相当于两次声明“必须创建并添加到我们的资源中的新资源名称”。

至少由于遗漏,这里的语义似乎并不完全如文档中所描述的那样。设计者为什么要这样做?那些省略的语义是什么?


  1. 或者可以在那里吗?这一切对我来说意味着元素可以按任何顺序处理,因此重点是每当第一次遇到 id 时都会创建它,即使它不与现有元素关联。

布局资源的文档指南中有一些内容确认 id 只会在第一次设置:

加号 + 表示这是一个新的资源 ID,aapt 工具将在 R.java 类中创建一个新的资源整数(如果它尚不存在)。

这并不意味着元素没有按顺序处理。

小智 0

它应用于所有布局组件。每当你想提及“id”时,你必须使用“@+id”