@id/
和@+id/
有什么区别?
在@+id/
中,加号+
表示创建一个新的资源名称并将其添加到R.java
文件中,那么@id/
呢?从ID
文档中可以得知:当引用 Android 资源 ID 时,你不需要加上加号,但必须添加 Android 包命名空间,像这样:
android:id="@android:id/list"
然而在下面的图片中,Eclipse没有建议任何类型的@android:id/
。
@id/
和@android:id/
是相同的吗?
@id/
和@+id/
有什么区别?
在@+id/
中,加号+
表示创建一个新的资源名称并将其添加到R.java
文件中,那么@id/
呢?从ID
文档中可以得知:当引用 Android 资源 ID 时,你不需要加上加号,但必须添加 Android 包命名空间,像这样:
android:id="@android:id/list"
然而在下面的图片中,Eclipse没有建议任何类型的@android:id/
。
@id/
和@android:id/
是相同的吗?
layout_below
和android:id
也是非常好的,因为正如Tanmay Mandal在他的回答中提到的那样,“+”意味着如果该符号不存在,就创建该符号。因此,这也不会产生任何负面运行效果(尽管可能会略微增加编译时间^^)。 - Levite加号(+)是将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时就不需要包含 '+' 字符。 - Nathan Schwermannres/drawable/
还是 res/layout/
或者 res/values/
?那个文件的名称是什么?如果您有任何有用的链接,请在此处发布。 - Vikas Patidar简而言之
android:id="@+id/my_button"
+id表示告诉Android在资源中添加或创建一个新的ID。
而
android:layout_below="@id/my_button"
它只是帮助引用已生成的ID。
这非常简单:
"@+..." - 创建新的
"@..." - 链接到现有的
来源:https://developer.android.com/guide/topics/resources/layout-resource.html#idvalue
+
)。编译应用程序时,SDK工具将使用该ID名称在项目的R.java
文件中创建一个新的资源ID,该资源ID指向EditText
元素。通过这种方式仅声明一次资源ID,其他对该ID的引用不需要加上加号。只有在指定新的资源ID时才需要使用加号,对于像字符串或布局这样的具体资源则不需要。有关资源对象的更多信息,请参见侧边栏。@+id
和 @id
的区别是:
@+id
用于在 R.java
文件中为视图创建一个 ID。@id
用于引用在R.java文件中为视图创建的ID。我们在使用 android:id=""
时需要使用 @+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>
@+id/spinner
在其他视图中创建,在定义 Spinner 时我们引用了上面创建的 id。来自开发者指南:
android:id="@+id/my_button"
android:id="@android:id/empty"
。@id/
和@android:id/
不是同一个东西。
@id/
用于引用应用程序中的ID,@android:id/
用于引用Android平台中的项目。
Eclipse错了。
@id/ 引用应用程序中的ID
**,但是当我们使用它来引用应用程序资源时,Eclipse会给出“找不到与给定名称匹配的资源(位于'value'为'@id/my_resource_id'的'id'处)”的错误。那么 @id/
和 @+id/
之间有什么区别?你怎么能说Eclipse是错的呢? - Vikas PatidarEclipse存在一个bug,有时如果你刚刚创建了一个新的@+id/..
,即使在清除项目并重新构建之后,它也不会立即添加到R.java文件中。解决方法是重启Eclipse。
我认为应该尽快解决这个问题,因为它可能(并且根据经验,确实会)让一些开发人员以为他们的语法有问题,即使没有任何需要调试的内容。