【问题标题】:Why does the designer use "@+id" instead of "@id" for constraints?为什么设计者使用“@+id”而不是“@id”作为约束?
【发布时间】:2020-11-29 08:44:02
【问题描述】:

我一直认为@+id 表示创建新ID(通常与android:id 一起使用),@id 表示在其他地方引用它,如在in a popular question herethe official documentation 中详细解释的那样:

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

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

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

app:layout_constraintTop_toBottomOf="@+id/rlistfrag"

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

似乎这里的语义至少与文档中描述的不完全一样。设计者为什么要这样做,那些省略的语义是什么?


  1. 或者可以吗?这一切对我来说意味着元素可以按任何顺序处理,所以关键是只要第一次遇到一个 id 就会创建它,即使它与现有元素没有关联。

guide on layout resources 文档中有一点确认 id 只会在第一次设置:

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

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

【问题讨论】:

    标签: android android-studio android-layout designer


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多