@ id /和@ id /之间的区别是什么?
在 @+id/ 中,加号 + 指示创建新的资源名称并添加到 R.java 文件但是 @id/ 呢?从ID的文档:当引用Android资源 ID 时,您不需要加号,但必须添加android包命名空间,如下所示:
+
R.java
ID
android:id="@android:id/list"
但是在下面的图像中,Eclipse没有提出任何类型的 @android:id/ .
@android:id/
@ id /和@android:id /相同吗?
Android中 “@+id/” 和 “@id/” 之间的区别
“@+id/”
“@id/”
第一个用于创建特定ui组件的 ID ,另一个用于引用特定组件
仅当您第一次定义资源ID时才需要资源类型之前的加号() . 编译应用程序时,SDK工具使用ID名称在项目的R.java文件中创建一个新的资源ID,该文件引用EditText元素 . 使用此方式声明资源ID后,对ID的其他引用不需要加号 . 仅在指定新资源ID时才需要使用加号,而对于字符串或布局等具体资源则不需要 . 有关资源对象的更多信息,请参阅侧边框 .
来自:https://developer.android.com/training/basics/firstapp/building-ui.html
来自Developer Guide:
android:id="@+id/my_button"
字符串开头的at符号( @ )表示XML解析器应解析并扩展ID字符串的其余部分,并将其标识为ID资源 . 加号( + )表示这是必须创建的新资源名称并添加到我们的资源中(在 R.java 文件中) . Android框架提供了许多其他ID资源 . 引用Android资源ID时,您不需要加号,但必须添加 android 包命名空间,如下所示:
@
android
android:id="@android:id/empty"
@+id 和 @id 之间的区别是:
@+id
@id
@+id 用于在 R.java 文件中为视图创建id .
@id 用于引用为R.java文件中的视图创建的id .
我们将 @+id 与 android:id="" 一起使用,但如果未创建id并且我们在创建之前引用它(前向引用),该怎么办?
android: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/name" android:layout_alignParentRight="true" /> </RelativeLayout>
在上面的代码中,Spinner @+id/spinner 的id在其他视图中创建,在定义微调器时,我们引用上面创建的id .
@+id/spinner
因此,如果我们在创建视图之前使用视图,则必须创建id .
有时您会在布局文件中看到引用,例如:
<listview id="@+id/android:list">
和
<listview id="@android:id/list">
有什么不同?
我很高兴你问☺
@+id/foo 表示您正在应用程序的命名空间中创建名为foo的id . 您可以使用 @id/foo 来引用它 . @android:id/foo 表示您指的是android命名空间中定义的id .
@+id/foo
@id/foo
@android:id/foo
如果符号尚不存在,则表示创建符号 . 在引用android:symbols时你不需要它(并且不应该使用它),因为平台已经为你定义了这些,并且无论如何你都无法在该命名空间中创建自己的 .
此命名空间是框架的命名空间 . 例如,你需要使用 @android:id/list 因为这是框架期望找到的id ..(框架只知道android命名空间中的id . )
@android:id/list
完全复制source
如果视图项执行相同的操作,则可以在任何布局中对每个条目使用@id,因为在编译多个@ id / foo期间,R.java文件仅创建一个枚举 . 因此,例如,如果我在每个页面上都有一个执行相同操作的保存按钮,我在每个布局中使用android:id =“@ id / button_save” . R.java文件只有一个button_save条目 .
Android使用一些名为resources的文件,其中存储了XML文件的值 .
现在,当您使用@ id /作为XML对象时,它正在尝试引用已在values文件中注册的id . 另一方面,当您使用@id /时,它会在值文件中注册一个新的id,如''符号所暗示的那样 .
希望这可以帮助 :) .
该标志是一个捷径,用于将id添加到资源ID列表中 . 否则你需要将它们放在像这样的xml文件中
<?xml version="1.0" encoding="utf-8"?> <resources> <item name="my_logo" type="id"/> </resources>
你引用已经在Android系统中定义的 Android resources ,使用 @android:id/.. ,在访问你在项目中定义/创建的资源时,你使用 @id/..
Android resources
@android:id/..
@id/..
More Info
根据你在聊天中的澄清,你说你有这样的问题:
如果我们使用android:id =“@ id / layout_item_id”它不起作用 . 取而代之的是@ id /,那么这里的区别是什么?那是我原来的问题 .
嗯,这取决于上下文,当你使用 android:id 的XML属性时,你正在指定一个新的id,并指示解析器(或称之为构建器)在 R.java 中创建一个新条目,因此您必须包含 + 符号 .
android:id
而在另一种情况下,如 android:layout_below="@id/myTextView" ,您指的是已经创建的ID,因此解析器将此链接到 R.java 中已创建的ID .
android:layout_below="@id/myTextView"
More Info Again
正如您在聊天中所说,请注意 android:layout_below="@id/myTextView" 将无法识别id为 myTextView 的元素,如果它是在您使用它的元素之后写入的 .
myTextView
Its very simple:
“@ ...“ - 创建新的
“@ ...” - 关于现有的链接
Source: https://developer.android.com/guide/topics/resources/layout-resource.html#idvalue
In Short
id加号告诉android在Resources中添加或创建一个新的id .
而
android:layout_below="@id/my_button"
它只是帮助引用已经生成的id ..
@id/ 和 @android:id/ 不一样 .
@id/
@id/ 引用应用程序中的ID, @android:id/ 引用Android平台中的项目 .
Eclipse错了 .
Eclipse中存在一个错误,有时如果您刚刚创建了一个新的 @+id/.. ,它将不会立即添加到R.java文件中,即使在清理项目之后也是如此 . 解决方案是重启Eclipse .
@+id/..
我认为应该尽快解决这个问题,因为它可能(并且从经验中)会让一些开发人员误认为他们的语法有问题,并尝试调试它,即使没有什么可以调试的 .
13 回答
Android中
“@+id/”
和“@id/”
之间的区别第一个用于创建特定ui组件的
ID
,另一个用于引用特定组件来自:https://developer.android.com/training/basics/firstapp/building-ui.html
来自Developer Guide:
字符串开头的at符号(
@
)表示XML解析器应解析并扩展ID字符串的其余部分,并将其标识为ID资源 . 加号(+
)表示这是必须创建的新资源名称并添加到我们的资源中(在R.java
文件中) . Android框架提供了许多其他ID资源 . 引用Android资源ID时,您不需要加号,但必须添加android
包命名空间,如下所示:android:id="@android:id/empty"
@+id
和@id
之间的区别是:@+id
用于在R.java
文件中为视图创建id .@id
用于引用为R.java文件中的视图创建的id .我们将
@+id
与android:id=""
一起使用,但如果未创建id并且我们在创建之前引用它(前向引用),该怎么办?在这种情况下,我们使用
@+id
来创建id,在定义视图时我们必须引用它 .请参考以下代码:
在上面的代码中,Spinner
@+id/spinner
的id在其他视图中创建,在定义微调器时,我们引用上面创建的id .因此,如果我们在创建视图之前使用视图,则必须创建id .
有时您会在布局文件中看到引用,例如:
<listview id="@+id/android:list">
和
<listview id="@android:id/list">
有什么不同?
我很高兴你问☺
@+id/foo
表示您正在应用程序的命名空间中创建名为foo的id . 您可以使用@id/foo
来引用它 .@android:id/foo
表示您指的是android命名空间中定义的id .如果符号尚不存在,则表示创建符号 . 在引用android:symbols时你不需要它(并且不应该使用它),因为平台已经为你定义了这些,并且无论如何你都无法在该命名空间中创建自己的 .
此命名空间是框架的命名空间 . 例如,你需要使用
@android:id/list
因为这是框架期望找到的id ..(框架只知道android命名空间中的id . )完全复制source
如果视图项执行相同的操作,则可以在任何布局中对每个条目使用@id,因为在编译多个@ id / foo期间,R.java文件仅创建一个枚举 . 因此,例如,如果我在每个页面上都有一个执行相同操作的保存按钮,我在每个布局中使用android:id =“@ id / button_save” . R.java文件只有一个button_save条目 .
Android使用一些名为resources的文件,其中存储了XML文件的值 .
现在,当您使用@ id /作为XML对象时,它正在尝试引用已在values文件中注册的id . 另一方面,当您使用@id /时,它会在值文件中注册一个新的id,如''符号所暗示的那样 .
希望这可以帮助 :) .
该标志是一个捷径,用于将id添加到资源ID列表中 . 否则你需要将它们放在像这样的xml文件中
你引用已经在Android系统中定义的
Android resources
,使用@android:id/..
,在访问你在项目中定义/创建的资源时,你使用@id/..
More Info
根据你在聊天中的澄清,你说你有这样的问题:
嗯,这取决于上下文,当你使用
android:id
的XML属性时,你正在指定一个新的id,并指示解析器(或称之为构建器)在R.java
中创建一个新条目,因此您必须包含+
符号 .而在另一种情况下,如
android:layout_below="@id/myTextView"
,您指的是已经创建的ID,因此解析器将此链接到R.java
中已创建的ID .More Info Again
正如您在聊天中所说,请注意
android:layout_below="@id/myTextView"
将无法识别id为myTextView
的元素,如果它是在您使用它的元素之后写入的 .Its very simple:
“@ ...“ - 创建新的
“@ ...” - 关于现有的链接
Source: https://developer.android.com/guide/topics/resources/layout-resource.html#idvalue
In Short
而
@id/
和@android:id/
不一样 .@id/
引用应用程序中的ID,@android:id/
引用Android平台中的项目 .Eclipse错了 .
Eclipse中存在一个错误,有时如果您刚刚创建了一个新的
@+id/..
,它将不会立即添加到R.java文件中,即使在清理项目之后也是如此 . 解决方案是重启Eclipse .我认为应该尽快解决这个问题,因为它可能(并且从经验中)会让一些开发人员误认为他们的语法有问题,并尝试调试它,即使没有什么可以调试的 .