这两个视图位于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" />
答案 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。