我刚开始使用 android,完成了大约 5 个布局文件。但是,我刚刚意识到我一直在交替使用@id 和@+id,但我不确定两者之间的确切区别是什么。
5 回答
@+id
在为视图定义自己的 Id 时需要使用。
完全来自文档:
字符串开头的符号 (@) 表示 XML 解析器应该解析和扩展 ID 字符串的其余部分,并将其标识为 ID 资源。加号 (+) 表示这是一个新资源名称,必须创建并添加到我们的资源中(在 R.java 文件中)。Android 框架提供了许多其他 ID 资源。引用 Android 资源 ID 时,不需要加号,但必须添加 android 包命名空间。
这是一个实际的例子:
<Button
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/start"
/>
所以在这里,您创建了两个IDs
,启动和检查。然后,在您的应用程序中,您可以使用findViewById(R.id.start)
.
这android:layout_below="@id/start"
指的是现有的id.start
,意味着您的Button
带有 id的检查将位于Button
带有 id start的下方。
所有其他答案都忘了提到这件小事。
当使用@id/来引用已经生成的android 资源时,请确保您所引用的资源是在之前而不是之后定义的。
那不是这个:
<Button
android:id="@+id/check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/start"
/>
<Button
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
用这个:
<Button
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/start"
/>
在第一个示例中,您指的是在您访问它之后生成的资源@id/start 。虽然这适用于原生 android,但如果您要在 react-native 或 ionic 或任何其他混合平台中使用此代码,则会产生资源未找到错误。
所以在使用它作为@id/之前要小心生成资源id
有时您必须使用 + 号。例如,当您使用时<include ... />
,包含的文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.FloatingActionButton xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
(...)
app:layout_anchor="@+id/view_pager"
app:layout_anchorGravity="top|right|end"
/>
如果您不添加+
,"@+id/view_pager"
您将在构建项目时出错:
Error:(9, 24) No resource found that matches the given name (at 'layout_anchor' with value '@id/view_pager').
它发生在我的图书馆项目中。
android:id="@+id/my_button"
+id 加 sing 告诉 android 在 Resources 中添加或创建一个新的 id。
android:layout_below="@id/my_button"
它只是帮助参考已经生成的 id ..
为了访问 Java 中的小部件(或组件)或使其他人依赖它,我们需要一个唯一的值来表示它。该唯一值由 android:id 属性提供,该属性实质上将作为 @+id/ 后缀提供的 id 添加到 id 资源文件中,以供其他人查询。Toolbar 的 id 可以这样定义,
android:id=”@+id/toolbar
findViewById(…) 现在可以跟踪以下 id,它在 res 文件中查找它的 id,或者只是 R.id 目录并返回相关视图的类型。另一个 @id 的行为与 findViewById(...) 相同——通过提供的 id 查找组件,但仅保留用于布局。它最一般的用途是相对于它返回的组件放置一个组件。
android:layout_below=”@id/toolbar”