Ответ 1
Вы должны использовать нотацию @+
при первом вводе идентификатора в файле XML. Второй и последующий раз, когда вы можете - и должны - отказаться от знака +
. Это поможет уловить опечатки.
Например, предположим, что у вас есть RelativeLayout
. У вас есть TextView
в RelativeLayout
, чей android:id
есть @+id/label
. Позже в XML файле макета вы хотите сослаться на это TextView
из другого для целей позиционирования (например, для android:layout_below
).
Если вы набрали android:layout_below="@+id/labbel"
(обратите внимание на опечатку), во время компиляции это будет считаться ОК. Тем не менее, во время выполнения все не будет работать, начиная от неправильного расположения виджета и заканчивая прямым сбоем, в зависимости от версии Android.
Если вы набрали android:layout_below="@id/labbel"
(обратите внимание на опечатку и отсутствующий знак +
), вы получите ошибку компиляции.
UPDATE
Поскольку в первый раз я не был достаточно ясен, по-видимому, попробуйте еще раз.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="URL:"
android:layout_alignBaseline="@+id/entry"
android:layout_alignParentLeft="true"/>
<EditText
android:id="@id/entry"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/label"
android:layout_alignParentTop="true"/>
<Button
android:id="@+id/ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/entry"
android:layout_alignRight="@id/entry"
android:text="OK" />
<Button
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/ok"
android:layout_alignTop="@id/ok"
android:text="Cancel" />
</RelativeLayout>
Выше, вы увидите RelativeLayout
. Вы заметите, что первые вхождения каждого ID получают знак +
. Второе и последующее вхождения каждого идентификатора не получают знак +
.
Вы можете использовать знак +
для всех из них, но тогда, если вы сделаете опечатку, компилятор не поймает проблему.
Знак +
эффективно утверждает "присваивает новый идентификатор". Не имея знака +
"использовать ранее выделенный идентификатор или не во время компиляции, если такого идентификатора нет".