@id/ 和@+id/ 有什么区别?
在 @+id/
中,加号 +
指示创建一个新资源名称并添加到 R.java
文件中,但是 @id/
呢?来自 ID
的文档:引用 Android 资源 ID
时,不需要加号,但必须添加 android 包命名空间,如下所示:
android:id="@android:id/list"
但在下图中,Eclipse 不建议使用任何类型的 @android:id/
。
https://i.stack.imgur.com/zgbUz.png
@id/ 和 @android:id/ 是一样的吗?
您使用 @android:id/..
引用已在 Android 系统中定义的 Android resources
,而要访问您在项目中定义/创建的资源,请使用 @id/..
更多信息
根据您在聊天中的说明,您说您遇到了这样的问题:
如果我们使用 android:id="@id/layout_item_id" 它不起作用。取而代之的是 @+id/ 工作,那么这里有什么区别?那是我最初的问题。
嗯,这取决于上下文,当您使用 android:id
的 XML 属性时,您将指定一个新的 id,并指示解析器(或称其为构建器)在 {2 },因此您必须包含一个 +
符号。
而在另一种情况下,例如 android:layout_below="@id/myTextView"
,您指的是已经创建的 id,因此解析器将其链接到 R.java
中已创建的 id。
再次提供更多信息
正如您在聊天中所说,请注意,如果 ID 为 myTextView
的元素写在您使用它的元素之后,android:layout_below="@id/myTextView"
将无法识别它。
+ 号是将 id 添加到资源 id 列表的快捷方式。否则,您需要将它们放在这样的 xml 文件中
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="my_logo" type="id"/>
</resources>
<View android:id="@id/my_logo"/>
如果你没有我在上面定义的资源文件,那么你需要像 <View android:id="@+id/my_logo"/>
那样做 注意:你只需要做一次+id,所以如果在另一个布局文件中你做了 <View android:id="+id/my_logo"/>下次在布局中使用相同的 id 时,您不需要包含“+”字符。
res/drawable/
或 res/layout/
或 res/values/
放在哪里,该文件的名称是什么?如果您对此有任何有用的链接,请在此处发布。
简而言之
android:id="@+id/my_button"
+id 加号告诉 android 在 Resources 中添加或创建一个新的 id。
尽管
android:layout_below="@id/my_button"
它只是帮助参考已经生成的 id ..
仅当您第一次定义资源 ID 时,才需要资源类型前的加号 (+)。编译应用程序时,SDK 工具使用 ID 名称在项目的 R.java 文件中创建一个新的资源 ID,该 ID 引用 EditText 元素。以这种方式声明一次资源 ID 后,对该 ID 的其他引用不需要加号。仅在指定新资源 ID 时才需要使用加号,而对于字符串或布局等具体资源则不需要。有关资源对象的更多信息,请参见边栏。
来自:https://developer.android.com/training/basics/firstapp/building-ui.html
它非常简单:
"@+..." - 创建新的
“@...” - 现有链接
来源: https://developer.android.com/guide/topics/resources/layout-resource.html#idvalue
android:id="@+id/my_button"
字符串开头的 at 符号 (@
) 表示 XML 解析器应该解析和扩展 ID 字符串的其余部分,并将其标识为 ID 资源。加号 (+
) 表示这是一个新的资源名称,必须创建并添加到我们的资源中(在 R.java
文件中)。 Android 框架提供了许多其他 ID 资源。引用 Android 资源 ID 时,不需要加号,但必须添加 android
包命名空间,如下所示:
android:id="@android:id/empty"
Eclipse 存在一个错误,有时如果您刚刚创建了一个新的 @+id/..
,它不会立即添加到 R.java 文件中,即使在干净构建项目之后也是如此。解决方案是重新启动 Eclipse。
我认为应该尽快解决这个问题,因为它可能(并且根据经验,会)让一些开发人员误以为他们的语法有问题,并尝试调试它,即使真的没有什么可调试的。
Android 使用一些称为资源的文件,其中存储 XML 文件的值。
现在,当您将 @id/ 用于 XML 对象时,它会尝试引用已在值文件中注册的 id。另一方面,当您使用 @+id/ 时,它会在值文件中注册一个新的 id,正如“+”符号所暗示的那样。
希望这可以帮助 :)。
@id/
和 @android:id/
不一样。
@id/
在您的应用程序中引用 ID,@android:id/
在 Android 平台中引用项目。
日食是错误的。
@id/ referencing ID in your application
但是当我们使用它来引用应用程序资源时,eclise 会给出 Error: No resource found that matches the given name (at 'id' with value '@id/my_resource_id')
。那么 @id/
和 @+id/
有什么区别呢?你怎么能说日食是错的?
RelativeLayout
的情况下显示 @id/
@+id
和 @id
之间的区别是:
@+id 用于为 R.java 文件中的视图创建一个 id。
@id 用于引用为 R.java 文件中的视图创建的 id。
我们将 @+id
与 android:id=""
一起使用,但如果未创建 id 并且我们在创建之前引用它会怎样(前向引用)。
在这种情况下,我们使用 @+id
创建 id 并在定义视图时必须引用它。
请参考以下代码:
<RelativeLayout>
<TextView
android:id="@+id/dates"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/spinner" />
<Spinner
android:id="@id/spinner"
android:layout_width="96dp"
android:layout_height="wrap_content"
android:layout_below="@id/dates"
android:layout_alignParentRight="true" />
</RelativeLayout>
在上面的代码中,Spinner @+id/spinner
的 id 是在其他视图中创建的,在定义微调器时,我们指的是上面创建的 id。
因此,如果我们在创建视图之前使用视图,我们必须创建 id。
如果视图项执行相同的操作,您可以为任何布局中的每个条目使用 @+id
,因为在编译多个 @+id/foo
期间,R.java
文件仅创建一个枚举。例如,如果我在每个页面上都有一个执行相同操作的保存按钮,我会在每个布局中使用 android:id="@+id/button_save"
。 R.java 文件只有一个 button_save 条目。
Android 中 “@+id/”
和 “@id/”
的区别
第一个用于创建特定 ui 组件的 ID
,另一个用于引用特定组件
不定期副业成功案例分享
android:layout_below="@+id/numberPicker1"
和android:layout_alignBaseline="@+id/button1"
。 :-( 在我开始咒骂之前我会闭嘴。+
放入layout_below
和android:id
真的很好,因为 Tanmay Mandal 在他的好(但被低估的)答案中提到的The '+' means to create the symbol if it doesn't already exist
。正因为如此,也没有负面的运行时影响(尽管可能是编译时间的微小增加^^)。