RelativeLayout id引用

时间:2013-04-02 09:16:27

标签: android android-layout

这两个视图位于RelativeLayout内。 IDE抛出错误,没有@id/et_pass,但如果我设置@+id/et_pass则没问题。那是为什么?

<ImageView 
    android:id="@+id/devider_zero"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@id/et_pass" <!-- Error is here -->
    android:src="@drawable/registration_line" />

<EditText
    android:id="@+id/et_pass"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/devider_first"
    android:background="@android:color/transparent"
    android:layout_gravity="left"
    android:ellipsize="start"
    android:ems="8"
    android:hint="@string/password"
    android:inputType="textPassword"
    android:layout_marginTop="@dimen/register_layout_edittext_margin_top"
    android:maxLines="1" />

2 个答案:

答案 0 :(得分:0)

@+id/something@id/something之间的区别在于第一个是创建id,第二个是引用已经创建的id。第一次提及ID时,您必须使用@+id/创建ID,之后的任何内容都可以使用@id/

当您为视图提供属性android:id时,如果您已在文件中较早的位置使用过该属性,则不必使用@+id/

由于android编译XML文件的方式,它首先读取您的图像视图,到达您编写@id/的位置,在R文件中搜索id,但找不到它。但是如果你调用@+id/,eclipse会搜索R文件中的id,找不到它,然后添加它。

此外,这不是RelativeLayouts特有的,如果你将相同的代码放在线性布局中,你也会得到那个错误

答案 1 :(得分:0)

@+id指示解析器创建ID(如果它不存在)。 @id用于指代现有ID。