@id/"和“@ + id /“;在安卓

@id/@+id/的区别是什么?

@+id/中,加号+指示创建一个新的资源名并添加到R.java文件中,但@id/呢?来自ID的文档:当引用Android资源ID时,你不需要加号,但必须添加Android包命名空间,如下所示:

android:id="@android:id/list"

但是在下面的图像中,Eclipse没有建议任何类型的@android:id/

对于@/id和@+/id的建议的图像

@id/@android:id/是一样的吗?

239576 次浏览

你使用@android:id/..来引用Android resources,它已经在Android系统中定义,而要访问你在项目中定义/创建的资源,你使用@id/..

更多信息

根据你在聊天中的澄清,你说你有一个这样的问题:

如果我们使用android:id="@id/layout_item_id",它将不起作用。相反,@+id/工作,所以这里有什么不同?这就是我最初的问题。

好吧,这取决于上下文,当你使用android:id的XML属性时,那么你就指定了一个新的id,并指示解析器(或称其为构建器)在R.java中创建一个新条目,因此你必须包含+符号。

而在另一种情况下,比如android:layout_below="@id/myTextView",你引用的是一个已经创建的id,所以解析器将其链接到R.java中已经创建的id。

更多信息

正如你在聊天中所说的,注意android:layout_below="@id/myTextView"不会识别id为__abc1的元素,如果它写在你使用它的元素之后。

@id/@android:id/是不一样的。

@id/引用应用程序中的ID, @android:id/引用Android平台中的项目。

Eclipse是错误的。

+号是将id添加到资源id列表的快捷方式。否则,您需要将它们保存在这样的xml文件中

<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="my_logo" type="id"/>
</resources>

Eclipse有一个bug,有时如果你刚刚创建了一个新的@+id/..,它不会立即添加到R.java文件中,即使是在清理构建项目之后。解决方案是重新启动Eclipse。

我认为这个问题应该尽快解决,因为它可能(从经验来看,将会)使一些开发人员感到困惑,认为他们的语法有问题,并试图调试它,即使实际上没有什么需要调试的。

开发人员指南:

android:id="@+id/my_button"

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

android:id="@android:id/empty"

Android使用一些称为资源的文件,其中存储XML文件的值。

现在,当您对一个XML对象使用@id/时,它试图引用一个已经在值文件中注册的id。另一方面,当你使用@+id/时,它会在值文件中注册一个新的id,就像'+'符号所暗示的那样。

希望这能有所帮助:)。

资源类型前的加号(+)仅在第一次定义资源ID时才需要。当你编译应用程序时,SDK工具使用ID名称在项目的R.java文件中创建一个引用EditText元素的新资源ID。通过这种方式声明一次资源ID,其他对ID的引用就不需要加号了。只有在指定新的资源ID时才需要使用加号,对于字符串或布局等具体资源不需要使用加号。有关资源对象的更多信息,请参阅侧框。

来自:https://developer.android.com/training/basics/firstapp/building-ui.html

如果视图项执行相同的操作,则可以对任何布局中的每个条目使用@+id,因为在编译多个@+id/foo时,R.java文件只创建一个枚举。例如,如果在每个页面上都有一个执行相同操作的保存按钮,则在每个布局中使用android:id="@+id/button_save"。R.java文件只有一个button_save条目。

简而言之

android:id="@+id/my_button"

+id加号告诉android在资源中添加或创建一个新的id。

android:layout_below="@id/my_button"

它只是帮助引用已经生成的id..

Android中“@+id/”“@id/”的区别

第一个用于创建特定ui组件的ID,另一个用于引用特定组件

很简单:

“@ +……”-创建新的

“@……”-现有链接

来源: https://developer.android.com/guide/topics/resources/layout-resource.html#idvalue

@+id@id的区别是:

  • @+id用于在R.java文件中为视图创建id。
  • @id用于引用在R.java文件中为视图创建的id。

我们将@+idandroid: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是在其他视图中创建的,在定义Spinner时,我们引用了上面创建的id。

如果我们在视图被创建之前使用视图,我们必须创建id。