首页 > 解决方案 > 为什么设计者使用“@+id”而不是“@id”作为约束?

问题描述

我一直理解指示创建一个新ID@+id通常android:id@id

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

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

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

app:layout_constraintTop_toBottomOf="@+id/rlistfrag"

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

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


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

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

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

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

标签: androidandroid-studioandroid-layoutdesigner

解决方案


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


推荐阅读