为什么每次在Android相对布局中提供@ + id /?

时间:2013-11-11 11:10:13

标签: android xml android-layout relativelayout

以下是我从this网站挑选的代码。这种模式用于许多类似的代码中。

<Button
    android:id="@+id/btnButton1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button 1"/>

<Button
    android:id="@+id/btnButton2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button 2"
    android:layout_toRightOf="@+id/btnButton1"/> <!-- Why use @+id again and not just @id/btnButton1  -->

AFAIK +符号是将ID添加到资源ID列表的快捷方式。 @ + id / foo表示您在应用程序的命名空间中创建名为foo的id。你可以使用@ id / foo来引用它。

那么为什么不使用android:layout_toRightOf="@id/btnButton1代替android:layout_toRightOf="@+id/btnButton1,因为资源已经用id定义了?

5 个答案:

答案 0 :(得分:3)

在引用已声明的标识符时,使用@+id标识符声明语法肯定是一种常见的模式。

优点:

  • 您可以自由地重新排序XML中的元素,而无需更改标识符声明和引用的顺序。

缺点:

  • 尝试引用现有标识符时,不会自动检测标识符名称中的拼写错误。

答案 1 :(得分:1)

一旦你需要一个锚点来使用layout_toRightOf,这就是为什么你需要提供一个id。其次,您可以省略++保留以添加到R.id类,但由于它仅包含静态最终字段,因此其值分配一次。

答案 2 :(得分:1)

在引用其他视图时,您应该使用android:layout_toRightOf="@id/btnButton1"/>,而不需要使用+号

答案 3 :(得分:1)

你需要使用这样的代码来定义视图,你只需要提供带有'+'符号的id:

android:id="@+id/btnButton1"

定义后,它将出现在R.id类中。然后你可以在调用它时使用一个简单的@id:

android:id="@id/btnButton1"

因此,当您引用此视图时,您不再需要“+”:

<Button
    android:id="@+id/btnButton2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button 2"
    android:layout_toRightOf="@id/btnButton1"/>

答案 4 :(得分:0)

最佳做法是在第一次出现您的ID时添加@+id/,并在以后想要引用它时使用@id/

但是

如果您之后更改了XML文件组件的排列并且忘记在第一次出现时为您的ID添加+符号,那么应用程序将崩溃,因为您正在尝试引用到尚未在R.java文件中声明的ID。

这就是为什么 推荐 始终使用@+id/来避免这样的问题。

我希望这可以帮助您了解它的工作原理