Android 设计师为什么使用“设计”呢@+;id";而不是",@id";约束条件?

Android 设计师为什么使用“设计”呢@+;id";而不是",@id";约束条件?,android,android-studio,android-layout,designer,Android,Android Studio,Android Layout,Designer,我一直认为@+id表示新id的创建(通常与android:id一起使用),而@id表示在其他地方引用它,详细解释如下: 字符串开头的at符号(@)表示XML解析器应该解析和展开ID字符串的其余部分,并将其标识为ID资源加号(+)表示必须创建一个新的资源名称,并将其添加到我们的资源中(在R.java文件中)。Android框架还提供了许多其他ID资源引用Android资源ID时,不需要加号,,但必须添加Android软件包名称空间 没有强制执行这一点有点奇怪;您可以在任何地方使用@+id,多次使用

我一直认为
@+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"
其中,
rlistfrag
被分配给同一文件中另一个具有
android:id
的元素——如果该元素不存在,则设计人员不可能创建约束,因此不存在上下文歧义。1根据文档,这相当于两次声明“必须创建并添加到我们的资源中的新资源名称”

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


  • 这一切对我来说意味着元素可以按任何顺序处理,所以问题是,只要第一次遇到id,就会创建它,即使它与现有元素没有关联
  • 文档中有一点确认id只会在第一次设置:

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

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