1

这两个视图都在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" />
4

2 回答 2

0

@+id/something和之间的区别在于@id/something第一个是创建一个id,第二个是引用一个已经创建的id。你第一次提到一个 id 你必须使用 来创建它@+id/,之后的任何东西都可以使用@id/

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

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

此外,这并非特定于 RelativeLayouts,如果您将相同的代码放在线性布局中,您也会收到该错误

于 2013-04-02T09:20:41.943 回答
0

@+id如果 ID 不存在,则指示解析器创建 ID。@id用于引用现有 ID。

于 2013-04-02T09:20:57.990 回答